2017-02-23 65 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. Public g_user As String У меня это внутри модуля, и эта переменная может использоваться во всех формах, поэтому я думал, что это глобальная переменная? Я использую vb.net, а не VB6. – vbnewbie

+0

Hm Да общедоступные переменные в Модулях являются глобальными ... Я забыл про эти грязные хаки, предоставленные Microsoft здесь ... –

ответ

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

Рад слышать :) –