4 / 4 / 0
Регистрация: 12.09.2011
Сообщений: 148

Создать событие onchange на изменение переменной

23.10.2012, 10:55. Показов 6293. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята! Привет! Вопрос такой: есть переменная, которая постоянно изменяется(неважно почему). Надо сделать событие наподобии,которое есть в textboxе "textchange", чтобы как только она(переменная) менялась выскакивал ивент. Прочитал MSDN нифига не понял. Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2012, 10:55
Ответы с готовыми решениями:

Создать событие на изменение переменной
Помогите создать событие на изменение переменной CALLERNUMBER Собственно причина в том что, внутри обработки Sub manager_bridges(ByVal...

Создать событие на изменение значения переменной
есть переменая типа инт мне необходимо создать событие которое бы происходило при изменении значения переменной, посмотрел пример в книге...

Событие onChange
Здравствуйте всем! Такая проблема при переключении языка переключается только последний в списке, не могу понять в чем проблема ...

14
99 / 99 / 3
Регистрация: 01.12.2011
Сообщений: 94
23.10.2012, 11:16
Вот в примере программа следит за состоянием переменной с именем "переменная".
На форме кнопка, при нажатии на кнопку значение переменной изменяется и соответственно показывается сообщение.
VB.NET
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
Public Class Form1
    Dim переменная As Object
 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        tmp = переменная 'заносим нашу переменную во временную
        a1.Start() 'запускаем поток с вечным циклом
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        переменная = (New Random).Next(0, 1000000000) 'генерируем случайное число, тем самым изменяя значение переменной
    End Sub
 
 
 
    Public Event changemy()
    Private Sub переменная_change() Handles Me.changemy
        MsgBox("Значение переменной ""переменная"" изменилось!")
    End Sub
    Dim a1 As New Threading.Thread(AddressOf wait)
    Dim tmp As Object
    Delegate Sub invoker()
    Sub invokermy()
        RaiseEvent changemy()
    End Sub
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        a1.Abort()
    End Sub
    Sub wait()
        Do
            If Not tmp = переменная Then
                tmp = переменная
                Dim a1 As New invoker(AddressOf invokermy)
                Me.Invoke(a1)
            End If
        Loop
    End Sub
End Class
0
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
23.10.2012, 11:20
Как идея.
При загрузке формы запускается процедура, которая в бесконечном цикле
сравнивает старое и новое значение переменной.
Обязательно включить DoEvents.
Если изменение есть - смена старого на новое и обработка события. Как.
Удачи.

Добавлено через 1 минуту
Извините не увидел вадим2. Не писал бы.
0
99 / 99 / 3
Регистрация: 01.12.2011
Сообщений: 94
23.10.2012, 11:23
Ничего)) Только лучше в поток этот цикл запихнуть, так как при DoEvents программа не заедает, но ничего сделать нельзя
0
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
23.10.2012, 11:39
Все верно, вадим2.
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
23.10.2012, 11:50
а так?
VB.NET
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
Public Class Form1
 
    Dim WithEvents NewVar As New MyVariable(Of String)
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        NewVar.Value = Date.Now.ToString
    End Sub
    
 
    Private Sub NewVar_OnChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles NewVar.OnChange
        MsgBox(NewVar.Value.ToString)
    End Sub
End Class
 
Friend Class MyVariable(Of T)
    Private pvalue As T
    Friend Event OnChange(ByVal sender As Object, ByVal e As System.EventArgs)
    Friend Property Value() As T
        Get
            Return pvalue
        End Get
        Set(ByVal value As T)
            pvalue = value
            RaiseEvent OnChange(Me, New System.EventArgs)
        End Set
    End Property
End Class
тут у нас переменная будет пользовательского класса с изменяемым типом (тип задается такой, какой нам надо, при объявлении нового экземпляра. Для доступа к ее значению используем свойство Value. Ну и взамен имеем событие OnChange
1
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
23.10.2012, 13:20
Отлично, Дмитрий!
0
4 / 4 / 0
Регистрация: 12.09.2011
Сообщений: 148
23.10.2012, 14:02  [ТС]
Дмитрий, Что такое "T"?
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
23.10.2012, 14:31
просто обозначение типа. Он в-общем случае (в теле класса не указан).
Это дает возможность на основе одного и того же класса создавать экземпляры переменных разных типов. Смотри на стр.№3 в моем коде - там объявлена переменная NewVar как новый экземпляр класса MyVariable и указано, что это будет тип String. Соотв. и свойство Value будет типа String для переменной NewVar.
Никто не мешает рядом объявить другую переменную - экземпляр класса MyVariable но с другим типом. И потом обрабатывать и ее событие OnClick отдельно от аналогичного события NewVar
1
4 / 4 / 0
Регистрация: 12.09.2011
Сообщений: 148
23.10.2012, 14:57  [ТС]
Дмитрий, спасибо! Еще один вопросик: как сделать так, чтобы событие возникало реально при изменении переменной: просто ее значение может повторяться несколько раз подряд( в дебуггере будет выглядеть так:4,2,2,2,2,2,8) а мне надо чтобы приходили значение (4,2,8)Вот так
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
23.10.2012, 15:04
как-то так:
VB.NET
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
Public Class Form1
 
    Dim WithEvents NewVar As New MyVariable(Of String)
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        NewVar.Value = Date.Now.ToString
    End Sub
    
 
    Private Sub NewVar_OnChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles NewVar.OnChange
        MsgBox(NewVar.Value.ToString)
    End Sub
End Class
 
Friend Class MyVariable(Of T)
    Private pvalue As T
    Friend Event OnChange(ByVal sender As Object, ByVal e As System.EventArgs)
    Friend Property Value() As T
        Get
            Return pvalue
        End Get
        Set(ByVal value As T)
if not pvalue.equals (value) then
 pvalue = value
            RaiseEvent OnChange(Me, New System.EventArgs)
end if
            End Set
    End Property
End Class
0
4 / 4 / 0
Регистрация: 12.09.2011
Сообщений: 148
23.10.2012, 15:13  [ТС]
Дмитрий! СУПЕР! СПАСИБО!

Может подскажите какую-нибудь хорошую литературку по VB.net и VS2010? СПАСИБО!
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
23.10.2012, 15:16
да в гугл залезь и скачай. Скорее всего будет все интересно.
1
4 / 4 / 0
Регистрация: 12.09.2011
Сообщений: 148
23.10.2012, 15:46  [ТС]
VB.NET
1
2
3
4
5
Public Sub order_OnChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles 1.OnChange, 2.OnChange
        If 1.Value = "16" And 2.Value <= -60 Then
            Call Sub(процедура)
        End If
    End Sub
Дмитрий, когда делаю вот так вот, то приходит значение "16" все равно 2 раза, хотя если поотдельности вызывать события все нормально. Я так предполагаю, что каждый onchange работает в своем потоке и 1 обновляется быстрей, чем 2 поэтому приходит два раза "16" и соответсвенно процедура вызвается дважды. Может ли такое быть или причина в другом?
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
23.10.2012, 16:17
Цитата Сообщение от Fardo Посмотреть сообщение
1 обновляется быстрей, чем 2
ну тут уж как ты указал в коде. Конечно, они не одновременно оба изменяются. Ну и тогда количество вызовов "процедуры" будет зависеть от того, на что изменились эти значения.
Т.е. положим, что у тебя в коде есть фрагмент:
VB.NET
1
2
1.value = 16
2.value = -20
при этом старое значение переменной 2 тоже <=60.
Тогда Call Sub(процедура) будет 2 раза.
А вот если
VB.NET
1
1.value =15
то ни разу не должно вызваться.
Или если старое значение 2.value>-59 то вызовется 1 раз.
А изменение значений идет в одном потоке (ну если ты специально с потоками не химичишь) и причем в той очередности, как прописано у тебя в коде.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2012, 16:17
Помогаю со студенческими работами здесь

Событие onchange
Здравствуйте кодеры) Установил на сайт скриптовый календарь на Input и теперь при клике на него выскакивает календарь далее устанавливается...

Не могу сделать событие на изменение данных в переменной , int или CString
как сделать что бы генерировалось событие ? если делать через while то в отдельном потоке надо да и не очень удобно это все , может можно...

Тег Select событие onchange
Как сделать так, что бы выполнялась функция на языке c#, при изменении поля в select

событие onchange тэга select
&lt;select id=&quot;street&quot; onchange=&quot;getstations()&quot;&gt; &lt;option value=0&gt;Виберіть вулицю&lt;/option&gt; &lt;option...

Вычисления по условию. Событие OnChange
Лабораторная работа 4. Вычисления по условию. Событие OnChange. Задание для выполнения Создать проект, содержащий две формы....


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

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

Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru