Свойство обработки изменено из другого класса в vb.net

У меня есть класс, как показано ниже, который содержит мои глобальные переменные в качестве свойства. Я сделал этот "ModelFullPath" из переменной в свойство, потому что я не знаю, как вызывать события с изменениями переменной (если у вас есть больше логических предложений, я буду признателен).

Public Class Globals
    Private Shared _modelfullpath As String = String.Empty
    Public Shared Event ModelPathChanged(ByVal _modelfullpath As String)

    Public Shared Property ModelFullPath() As String
        Get
            Return _modelfullpath
        End Get
        Set(ByVal value As String)
            _modelfullpath = value
            RaiseEvent ModelPathChanged(_modelfullpath)
        End Set
    End Property
    Public Shared Sub TestIt() Handles MyClass.ModelPathChanged
        ' Some codes in here
        MessageBox.Show("It Changed")
    End Sub
End Class

В моем другом классе у меня есть "Button2", который получает текстовое поле строкового значения и устанавливает свойство ModelFullPath моего Globals в соответствии со значением textbox1.Text. С другой стороны, Button1 записывает свойство Globals.ModelFullPath в значение label1.text.

Здесь я хотел бы поместить событие, если ModelFullPath изменен, я хотел бы сделать некоторые действия, такие как изменение цвета фона инструмента и т. Д. В настоящее время я установил для него показ "Это изменилось" с помощью окна сообщений. Но главная проблема в том, что я не могу справиться с этим из другого класса, как показано ниже.

Public Class MainTool
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Label1.Text = Globals.ModelFullPath
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Globals.ModelFullPath = TextBox1.Text
    End Sub
    Private Sub VariableChanged() Handles Globals.VariableChanged
        Globals.TestIt()
    End Sub
End Class

Как справиться Globals.VariableChanged событие? Потому что он не признает это событие.

1 ответ

Решение

Вам нужно использовать AddHandler(), чтобы подключить событие. Событие Load() вашей Формы является хорошим местом для этого:

Public Class MainTool

    Private Sub MainTool_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Globals.ModelPathChanged, AddressOf Globals_ModelPathChanged
    End Sub

    Private Sub Globals_ModelPathChanged(_modelfullpath As String)
        TextBox1.Text = _modelfullpath
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Globals.ModelFullPath = "Hello!"
    End Sub

End Class
Другие вопросы по тегам