Как создать прослушиватель событий для события, вызванного из другого класса - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь создать общий приемник / обработчик в моей основной форме для события, вызванного из класса (в другом файле).Я пытаюсь это сделать, потому что мне нужен доступ к моим меткам формы (и экземпляр этого класса должен быть глобальным, поэтому я не могу объявить его в своем классе формы).

Конечная цель -создать DataBindings между свойством «Text» метки и строкой / свойством при создании экземпляра (который вызывает событие).

В моем классе StaticScaleDetails:

Public Class StaticScaleDetails
    Implements System.ComponentModel.INotifyPropertyChanged
    Public Event CreatedNewScale()

    Private _ipAddress As String

    Public Property ipAddress
        Get
            Return _ipAddress
        End Get
        Set(value)
            _ipAddress = value
            RaiseEvent PropertyChanged(Me, New ComponentModel.PropertyChangedEventArgs("ipAddress"))
        End Set
    End Property

    Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) _
    Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

    Public Sub New(ByVal ip As String)
        ipAddress = ip

        RaiseEvent CreatedNewScale()
    End Sub

    Public Sub AssociateHandlers(ByRef ipObject As Object)
        ipObject.DataBindings.Add(New Binding("Text", Me, "ipAddress"))
    End Sub
End Class

Iнужен какой-то путь из моего класса Form для обработки события "CreatedNewScale ()".Любые идеи?

PS: Мне, вероятно, нужно создать список экземпляров StaticScaleDetails, поэтому я бы не хотел использовать обработчик только для конкретного экземпляра.

1 Ответ

0 голосов
/ 28 мая 2019

В конце концов, я нашел решение: мне нужен список, поэтому я создал его и добавил только один обработчик событий для объекта списка:

В модуле, содержащем некоторые глобальные переменные, я объявил

Public StaticScales As New BindingList(Of StaticScaleDetails)

, чтобы к нему можно было получить доступ из любого места.

Я добавил обработчик событий в свой Main:

Private LastIndex As Integer 'Variable to keep track of the size the list was the last time the event has been triggered

Private Sub ListIsChanged()
    If StaticScales.Count > LastIndex And StaticScales.Count <= 5 Then
        'Console.WriteLine("The list has changed: its size changed from {0} to {1}!", LastIndex, StaticScales.Count)

        SelectLabelsToAssociate()
        LastIndex = StaticScales.Count
    End If
End Sub

И в Load of My Main:

LastIndex = 0
AddHandler StaticScales.ListChanged, AddressOf ListIsChanged

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...