如何创建一个全球性事件? [英] How to create a global event?
问题描述
我有一个全局变量g_user作为字符串,并带有一个标签lb_welcome来显示用户名,当g_user更改后如何创建全局事件然后将触发一个函数
I have a global variable g_user as string and a Label lb_welcome to show username, How can i create a global event when g_user changed then will trigger a function
Private Sub Login()
g_user = VerifyUser(id,password)
lb_welcome.Text = $"Welcome {g_user}"
End Sub
我尝试做这样的事情:-
I try to do something like this:-
Private Sub RefreshLabel()
lb_welcome.Text = $"Welcome {g_user}"
End Sub
Private Sub g_user_Changed(sender As Object, e As EventArgs) Handles g_user.Changed
RefreshLabel()
End Sub
上面只是一个例子,lb_welcome.Text包含许多全局变量,当变量更改时,我总是必须手动添加该函数,因此可以创建一个全局事件来帮助我自动运行该函数吗?
Above is just an example, lb_welcome.Text contain many global variable, I always have to manually add the function when a variable changed, so is it possible to create a global event to help me run the function automatically?
推荐答案
您需要在模块中定义一个公共事件,如果更改了其中一个属性(此处为g_user),则会引发该事件:
You need to define a public Event in your Module which is raised if one of your properties (here g_user) is changed:
Public Module MyModule
Public Event Changed As EventHandler(Of ChangedEventArgs)
Private _user As String
Public Property g_user As String
Get
Return _user
End Get
Set(value As String)
_user = value
raisePropertyChanged("g_user", value)
End Set
End Property
Private Sub raisePropertyChanged(propertyName As String, value As String)
RaiseEvent Changed(Nothing, New ChangedEventArgs() With {.PropertyName = propertyName, .Value = value})
End Sub
End Module
EventArgs非常简单:
The EventArgs are pretty straight forward:
Public Class ChangedEventArgs
Inherits EventArgs
Public PropertyName As String
Public Value As String
End Class
在您的表单中,钩住事件并对之做出反应:
In your form hook the event and react to it:
Public Class Form1
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
AddHandler MyModule.Changed, AddressOf RefreshLabel
End Sub
Private Sub RefreshLabel(s As Object, e As ChangedEventArgs)
If e.PropertyName = "g_user" Then
lb_welcome.Text = $"Welcome {e.Value}"
Else
'...
End If
End Sub
End Class
这篇关于如何创建一个全球性事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!