如何创建一个全球性事件? [英] How to create a global event?

查看:59
本文介绍了如何创建一个全球性事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个全局变量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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆