Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/130: Рейтинг темы: голосов - 130, средняя оценка - 4.51
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Вопрос немного ламерский.
Есть trackBar.
Есть значение переменной, допустим, а.
Нужно при изменении a (меняется несколько раз в секунду, запись звука) также менять trackBar.value
(визуально уровень звука).
Вопрос!
Как сделать так, чтобы при изменении переменной а значение trackBar.value менялось бы автоматически?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2011, 23:49
Ответы с готовыми решениями:

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

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

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

9
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 00:25
Делал в 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  [ТС]
Спасибо, сейчас буду разбираться...

Добавлено через 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
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 21:56
Может это:
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  [ТС]
Да, мой недочёт...
Но всё равно не хочет работать.
//Что характерно, если оставить в примере кнопку и бешено на неё жать во время записи, ползунок всё-таки меняет своё положение.
А, не, про кнопку наврал, извиняюсь, продолжаю рыть...
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 22:07
Может выложишь тот не работающий пример? Я могу глянуть. Если это пример конечно.
1
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
04.03.2011, 23:06  [ТС]
Спасибо за помощь)
Саму прогу выкладывать не буду, она типа "секретная", вот упрощённый вариант.
При инициализации формы вроде как происходит привязка к значению "a" из DLL.
При нажатии кнопки button1 значение "a" из DLL увлеичивается на один.
При этом при изменении "a" trackBar1 не меняется, а мне как раз надо, чтобы оно при изменении "a" менялось.
button2 чисто для проверки.
В самом приложении переменная "a" будет меняться внутри DLL независимо от пользователя, поэтому и не могу понять, как привязать её.
Вложения
Тип файла: zip Testing.zip (81.6 Кб, 119 просмотров)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2011, 23:38
Всё просто. Только у меня VS 2010. Я сделал, чтобы внутри dll менялось значение свойства "А" и срабатывало событие. Короче trackBar теперь двигается. И ещё не забудь поставить зависимость основного проекта от dll.
Выделяешь основной проект в обозревателе решений и правой кнопкой мыши жмёшь: "Зависимости проектов", там выбираешь, что основное приложение зависит от dll (галочку ставишь). Только ничего не перепутай. Я в этом проекте уже сделал это.
Вложения
Тип файла: rar Testing.rar (47.0 Кб, 327 просмотров)
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
05.03.2011, 16:51
Ну дык, что? Помогло хоть?
1
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
06.03.2011, 18:12  [ТС]
Да! Я теперь хоть начал понимать, как он работает, думал немного в другом ключе раньше)
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2011, 18:12
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru