如何将事件处理程序移动到父窗体并传递事件参数
How to move event handler to a parent form and pass eventargs
在表格 2 中,我有一个填充了数据库搜索结果的数据网格视图。
我的目标是当单击 datagridview 中的单元格时,它通过将单击的行的索引和记录集传递给表单 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
使用自定义数据引发事件的最简单方法是声明并引发自定义事件。这个新事件可以在 DataGridView
的 _CellClick 事件处理程序中触发。以这种方式与 DataGridView 分离将有助于隔离和隔离任何未来的更改。
SelectedValueEventArgs class
创建此 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)
引发事件
在 DataGridView 的 _CellClick 事件处理程序中,设置事件参数并引发新事件
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 时,为新 created/published 添加一个处理程序事件,然后在事件处理程序中执行所需的操作 (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
在表格 2 中,我有一个填充了数据库搜索结果的数据网格视图。
我的目标是当单击 datagridview 中的单元格时,它通过将单击的行的索引和记录集传递给表单 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
使用自定义数据引发事件的最简单方法是声明并引发自定义事件。这个新事件可以在 DataGridView
的 _CellClick 事件处理程序中触发。以这种方式与 DataGridView 分离将有助于隔离和隔离任何未来的更改。
SelectedValueEventArgs class 创建此 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)
引发事件
在 DataGridView 的 _CellClick 事件处理程序中,设置事件参数并引发新事件
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 时,为新 created/published 添加一个处理程序事件,然后在事件处理程序中执行所需的操作 (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