Как переместить обработчик событий в родительскую форму и передать аргументы событий - PullRequest
0 голосов
/ 27 июня 2018

В форме 2 у меня есть сетевое представление, заполненное результатами поиска в базе данных.

Моя цель заключается в том, чтобы при щелчке по ячейке в сетке данных содержимое текстовых полей в форме 1 заполнялось путем передачи индекса выбранной строки и набора записей в функцию в коде для формы 1.

В форме 1 у меня есть следующее:

 rs = New ADODB.Recordset
 rs .CursorLocation = ADODB.CursorLocationEnum.adUseClient
 rs.Open("Exec " & class_Stored_Procedures.cs_spMyO_KontaktPersonen_SEA$ & " " & SQL$, gConnectionString$, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
 Dim f = New ChildForm()
 f.Show()
 f.Focus()
 f.getAdoRecords(rs)
 '
 'This is the part in question
 AddHandler f.DataGridView1_CellClick, FillForm1(rs, (index of the row clicked))

И ...

Private Function FillForm1(rs As ADODB.RecordSet, i As Integer)
    'fill textboxes with record i values of the recordset
End Function

В форме 2

1 Ответ

0 голосов
/ 27 июня 2018

Самый простой способ вызвать событие с пользовательскими данными - объявить и вызвать пользовательское событие. Это новое событие может быть запущено в обработчике событий _CellClick вашего DataGridView. Такое отделение от DataGridView поможет изолировать и изолировать любые будущие изменения.

SelectedValueEventArgs class Создайте этот класс для хранения информации о событии, которую вы хотите передать в родительскую форму, в вашем случае, Form1

Public Class SelectedValueEventArgs
    Inherits EventArgs
    Public Sub New(rs As ADODB.RecordSet, i As Integer)
        RecordSet = rs
        Index = i
    End Sub

    Public Property RecordSet As ADODB.RecordSet
    Public Property Index As Integer
End Class

Объявление события SelectedValueChanged

Объявите событие, которое вы хотите вызвать, с соответствующим именем. Я пошел на SelectedValueChanged. Это событие должно быть объявлено в вашем Form2 class

Public Event SelectedValueChanged As EventHandler(Of SelectedValueEventArgs)

Поднять событие

В обработчике события _CellClick объекта DataGridView установите аргументы событий и создайте новое событие

Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    Dim rs As ADODB.RecordSet = ' Set your ADOBB.RecordSet here
    Dim i As Integer = e.RowIndex
    Dim eventArgs As New SelectedValueEventArgs(rs, i)
    OnSelectedValueChanged(eventArgs)
End Sub

' This function will do the hard work of raising the event to parent forms
Protected Overridable Sub OnSelectedValueChanged(e As SelectedValueEventArgs)
    RaiseEvent SelectedValueChanged(Me, e)
End Sub

Обработка события в родительской форме

Наконец, в родительской форме (Form1) , когда вы показываете Form2 , добавляете обработчик для вновь созданного / опубликованного события и затем выполняете необходимое действие в обработчике событий. ( form2_SelectedValueChanged )

Private Sub btnButton1_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
    Dim f As New Form2
    AddHandler f.SelectedValueChanged, AddressOf form2_SelectedValueChanged
    f.Show()
End Sub

Private Sub form2_SelectedValueChanged(sender As Object, e As SelectedValueEventArgs)
    Debug.Print(e.Index)
End Sub
...