以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何实时监控到变量发生了变化?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=196172)

--  作者:百事可乐
--  发布时间:2025/4/5 9:01:00
--  如何实时监控到变量发生了变化?
foxtable中如何对全局变量实现监控?即当这个变量发生变化了,就执行某个操作比如点击btn1。因为变量可能会在很多场合下发生变化,所以如果按照通常的方法,每次发生变化时,手动编程,对它进行判断是否改变,一是可能会造成代码太冗余,二是可能有时因为粗心忘了进行变量变化的判断,而导致某些功能无法正常执行。有什么好办法吗?

网上找到一个办法:把这个变量放到表的字段中,然后利用datacolChanged来实现对它的监控,但这样的话,每次使用这个变量,都要进行一次定义,如: dim tid as integer = tables("varstable").rows(0)("tid"),失去了直接使用全局变量的原味,因本来就可以在任意场合直接使用这个全局代码 tid 的

那么,如何可以在全局代码中, 通过属性(Property)包装私有变量,在属性的 Set 部分触发事件或操作呢? 

--  作者:百事可乐
--  发布时间:2025/4/5 9:13:00
--  
找到办法了,并验证可行:

在全局代码中定义一个变量:
Private _myVar As Object  \' 私有变量
\' 定义属性
Public Property myVar() As Object
    Get
        Return _myVar
    End Get
    Set(value As Object)
        If Not Equals(_myVar, value) Then  \' 检查值是否变化
            _myVar = value
            \' 变量变化时触发操作(例如点击btn1)
            \' btn1_Click()  \' 直接调用按钮事件
            MessageBox.Show("变量发生了变化了:" & _myVar)
            \' 或者触发自定义事件
        End If
    End Set
End Property