12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
1

Отслеживание изменения переменной

03.03.2011, 23:49. Показов 26431. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Вопрос немного ламерский.
Есть trackBar.
Есть значение переменной, допустим, а.
Нужно при изменении a (меняется несколько раз в секунду, запись звука) также менять trackBar.value
(визуально уровень звука).
Вопрос!
Как сделать так, чтобы при изменении переменной а значение trackBar.value менялось бы автоматически?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2011, 23:49
Ответы с готовыми решениями:

Отслеживание изменения значения переменной
Как мне сделать так, что бы при изменении переменной, выполнялась функция из другого класса и после...

Отслеживание изменения значения переменной
Привет! Возникла такая задача - есть адрес переменной в памяти какого-то процесса. Мне нужно...

Отслеживание изменения файла
Не могу разобраться, почему при отслеживании изменений в файле происходит двойной вызов. Вот код...

Отслеживание изменения DataGridViewComboBoxCell
Добый день. Начал изучать С# и столкнулся с одной проблеймой. Есть таблица DataViewGrid, в которую...

9
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 00:25 2
Делал в WPF, так что замени progressBar на trackBar и RoutedEventArgs на EventArgs в button1_Click
По нажатии кнопки тестируем работу кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            SomeClass sc = new SomeClass();
            //подписываемся на событие изменения уровня громкости
            sc.VolumeLevelChanged += new SomeClass.VolumeEventHandler(sc_VolumeLevelChanged);
            sc.A = 20;
        }
 
        //обработчик события изменения уровня громкости звука
        void sc_VolumeLevelChanged(VolumeEventArgs arg)
        {
            //мы передали в экземпляре класса VolumeEventArgs уровень звука
            this.progressBar1.Value = arg.SoundLevel;
        }
    }
SomeClass это твой класс, который содержит значение уровня звука, которое ты хочешь присваивать ProgressBar.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    public class SomeClass
    {
        public SomeClass() { } //конструктор
 
        public delegate void VolumeEventHandler(VolumeEventArgs arg);
        public event VolumeEventHandler VolumeLevelChanged; 
 
        int a;
        public int A
        {
            get { return a; }
            set
            {
                a = value;
                OnVolumeChange(a); //сообщаем о изменении значения "a" и передаём это значение
            }
        }
 
        private void OnVolumeChange(int volumeLevel)
        {
            //если на событие подписались, то в его обработчик передаём уровень звука
            if (VolumeLevelChanged != null) 
                VolumeLevelChanged(new VolumeEventArgs(volumeLevel)); //выполняется обработчик события
        }
    }
 
    public class VolumeEventArgs : EventArgs
    {
        int soundLevel;
 
        public int SoundLevel { get { return soundLevel; } }
 
        public VolumeEventArgs(int soundLevel) //конструктор
        {
            this.soundLevel = soundLevel;
        }
    }
1
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
04.03.2011, 21:09  [ТС] 3
Спасибо, сейчас буду разбираться...

Добавлено через 19 часов 57 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class SomeClass
        {
            public SomeClass() { } //конструктор
 
            public delegate void VolumeEventHandler(VolumeEventArgs arg);
            public event VolumeEventHandler VolumeLevelChanged;
            int a;
            public int A
            {
                get { return DLL.volumeLevel; }
                set
                {
                    a = DLL.volumeLevel;
                    OnVolumeChange(DLL.volumeLevel); //сообщаем о изменении значения "a" и передаём это значение
                }
            }
 
            private void OnVolumeChange(int volumeLevel)
            {
                //если на событие подписались, то в его обработчик передаём уровень звука
                if (VolumeLevelChanged != null)
                    VolumeLevelChanged(new VolumeEventArgs(volumeLevel)); //выполняется обработчик события
            }
        }
 
        SomeClass sc = new SomeClass();
 
        public class VolumeEventArgs : EventArgs
        {
            int soundLevel;
 
            public int SoundLevel { get { return soundLevel; } }
 
            public VolumeEventArgs(int soundLevel) //конструктор
            {
                this.soundLevel = soundLevel;
            }
        }
 
        //обработчик события изменения уровня громкости звука
        void sc_VolumeLevelChanged(VolumeEventArgs arg)
        {
            //мы передали в экземпляре класса VolumeEventArgs уровень звука
            volumeBar.Value = arg.SoundLevel;
        }
 
        public c()
        {
            InitializeComponent();
            button1.Visible = false;
 
            //SomeClass sc = new SomeClass();
            //подписываемся на событие изменения уровня громкости
            sc.VolumeLevelChanged += new SomeClass.VolumeEventHandler(sc_VolumeLevelChanged);
        }
При этом ползунок не реагирует на изменение DLL.VolumeLevel (переменная берётся из DLL, да), я что-то сделал не так?
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 21:56 4
Может это:
C#
1
2
3
4
5
6
7
8
9
            public int A
            {
                get { return DLL.volumeLevel; }
                set
                {
                    a = DLL.volumeLevel;
                    OnVolumeChange(DLL.volumeLevel); //сообщаем о изменении значения "a" и передаём это значение
                }
            }
Заменить на это:
C#
1
2
3
4
5
6
7
8
9
            public int A
            {
                get { return DLL.volumeLevel; }
                set
                {
                    DLL.volumeLevel = value; //value это то значение, что присваивается A. 
                    OnVolumeChange(DLL.volumeLevel); //сообщаем о изменении значения "a" и передаём это значение
                }
            }
А вообще, если не совсем понятно, что за свойства такие. То вот могу объяснить. Свойство, что я привел выше этого текста, тоже самое, что код ниже:

C#
1
2
3
4
5
6
7
8
9
10
        public void set_Value_A(int a)
        {
            this.a = a;
            OnVolumeChange(a);
        }
 
        public int get_Value_A()
        {
            return this.a;
        }
Или:
C#
1
2
3
4
5
6
7
8
9
10
        public void set_Value_volume(int a)
        {
            DLL.volumeLevel = a;
            OnVolumeChange(DLL.volumeLevel);
        }
 
        public int get_Value_volume()
        {
            return DLL.volumeLevel;
        }
1
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
04.03.2011, 22:02  [ТС] 5
Да, мой недочёт...
Но всё равно не хочет работать.
//Что характерно, если оставить в примере кнопку и бешено на неё жать во время записи, ползунок всё-таки меняет своё положение.
А, не, про кнопку наврал, извиняюсь, продолжаю рыть...
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 22:07 6
Может выложишь тот не работающий пример? Я могу глянуть. Если это пример конечно.
1
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
04.03.2011, 23:06  [ТС] 7
Спасибо за помощь)
Саму прогу выкладывать не буду, она типа "секретная", вот упрощённый вариант.
При инициализации формы вроде как происходит привязка к значению "a" из DLL.
При нажатии кнопки button1 значение "a" из DLL увлеичивается на один.
При этом при изменении "a" trackBar1 не меняется, а мне как раз надо, чтобы оно при изменении "a" менялось.
button2 чисто для проверки.
В самом приложении переменная "a" будет меняться внутри DLL независимо от пользователя, поэтому и не могу понять, как привязать её.
Вложения
Тип файла: zip Testing.zip (81.6 Кб, 119 просмотров)
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 23:38 8
Всё просто. Только у меня VS 2010. Я сделал, чтобы внутри dll менялось значение свойства "А" и срабатывало событие. Короче trackBar теперь двигается. И ещё не забудь поставить зависимость основного проекта от dll.
Выделяешь основной проект в обозревателе решений и правой кнопкой мыши жмёшь: "Зависимости проектов", там выбираешь, что основное приложение зависит от dll (галочку ставишь). Только ничего не перепутай. Я в этом проекте уже сделал это.
Вложения
Тип файла: rar Testing.rar (47.0 Кб, 327 просмотров)
1
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
05.03.2011, 16:51 9
Ну дык, что? Помогло хоть?
1
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
06.03.2011, 18:12  [ТС] 10
Да! Я теперь хоть начал понимать, как он работает, думал немного в другом ключе раньше)
Спасибо!
0
06.03.2011, 18:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2011, 18:12
Помогаю со студенческими работами здесь

Отслеживание изменения значения свойства класса
Доброго всем времени суток! Есть некий класс, которых хранит свойства в виде class SomeClass {...

Отслеживание программного изменения положения курсора
Добрый день. Как можно, да и можно ли вообще узнать, указатель переместился с помощью мыши, или его...

Как избежать изменения одной переменной ссылочного типа, когда изменяется значение другой переменной
Подскажите, пожалуйста, как избежать изменения одной переменной ссылочного типа, когда изменяется...

Отслеживание в каком месте программного кода происходит изменение значения переменной
Привет! Мне необходимо отследить в каком месте программного кода происходит изменение значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru