2017-02-23 58 views
0

我有一個全局變量g_user作爲字符串和標籤lb_welcome顯示的用戶名,如何創建一個全球性的事件時g_user再改將觸發功能如何創建全局事件?

Private Sub Login() 
    g_user = VerifyUser(id,password) 
    lb_welcome.Text = $"Welcome {g_user}" 
End Sub 

我嘗試做這樣的事情: -

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包含許多全局變量,我總是需要手動添加當一個變量發生變化的功能,所以是有可能創造一個全球性的事件來幫我自動運行功能?

+0

在VB .NET中不存在*全局變量*。你確定你的標籤是正確的嗎?你使用VB 6嗎? –

+0

@AlexB。公共g_user作爲字符串我有這個模塊內,這個變量可以使用所有形式,所以我認爲這是全局變量?我使用VB.NET而不是VB6。 – vbnewbie

+0

嗯模塊中的公共變量是全球性的......我忘了微軟在這裏提供的那些骯髒的黑客... –

回答

1

你需要定義你的模塊,它是,如果你的屬性之一(這裏g_user)提出了一個公共事件改變:

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的是非常直截了當:

Public Class ChangedEventArgs 
    Inherits EventArgs 

    Public PropertyName As String 
    Public Value As String 
End Class 

在你的表單中鉤住事件並對其作出反應:

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 
+0

感謝它的工作! – vbnewbie

+0

很高興聽到:) –