Я создаю несколько подформ, каждый из того же класса, из моей родительской формы.
Каждая из подчиненных форм определяет событие, которое должно привести к тому, что родительская форма создаст новую подчиненную форму другого класса. - Однако обрабатывать события могут только последние созданные формы.
Считая, что это потому, что я повторно использовал ссылку на подформу, я сохраняю каждую из подчиненных форм в связанном списке типа подчиненной формы.
Код SubForm.
Public Class UserEditor
Property ID As Integer
Public Event EditGroup(ByRef group As GroupPrincipal, ByVal newWindow As Boolean, ByVal Source As Integer)
Public Sub New(ByVal U As UserPrincipal, ByVal theId As Integer)
InitializeComponent()
ID = theId
UserEditor1.DisplayUserPrincipal(U)
End Sub
Private Sub UserEditor1_GroupEdit(ByRef groupItem As GroupListItem) Handles UserEditor1.GroupEdit
RaiseEvent EditGroup(groupItem.Grp, False, ID)
End Sub
Код в родительской форме
Public Class ASADManager
Dim WithEvents UserEditorInstance As UserEditor
Dim WithEvents UserEditorList As New List(Of UserEditor)
Этот код срабатывает при выборе листового объекта в отображаемом списке.
If TypeOf leafObject Is UserPrincipal Then
UserEditorInstance = New UserEditor(currentLeaf.Principal, UserEditorList.Count) With {
.Text = currentLeaf.SamAccountName
}
UserEditorInstance.Show()
UserEditorInstance.Activate()
UserEditorList.Add(UserEditorInstance)
End If
Private Sub EditGroup(ByRef grp As GroupPrincipal, newWindow As Boolean, Source As Integer) Handles UserEditorInstance.EditGroup
If Not newWindow Then
Dim GEdit As New GroupEditorForm(grp) With {
.Text = grp.Name
}
GEdit.Show()
End If
End Sub
Все работает нормально в последнем открытом UserEditorInstance, оно захватывает и повторно генерирует событие, и это является причиной родительского элемента, который открывает форму GroupEditor.
Однако, если я выберу 2-й LeafObject (чтобы открыть другое окно UserEditor), его события будут перехвачены, а не предыдущие.
Как мне поймать обоих?
Надеюсь, это объяснение прояснит, что я делаю (и делаю неправильно)