Свойство обработки изменено из другого класса в vb.net - PullRequest
0 голосов
/ 13 января 2019

У меня есть класс как ниже, который содержит мои глобальные переменные в качестве свойства. Я сделал этот «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 Ответ

0 голосов
/ 13 января 2019

Вам нужно использовать 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
...