VB.NET中如何通过双击Enter键将Form2的DataGridView指定列值传至Form1
VB.NET实现双击Enter键传递DataGridView列值到主窗体
问题分析
现有代码的核心问题:
- Form1打开Form2后立即尝试获取值,此时用户还未在Form2执行双击Enter操作,逻辑顺序错误
- Form2的双击Enter事件仅设置当前单元格,未实现数据传递的核心逻辑
解决方案
步骤1:修正Form2的双击Enter检测与数据传递逻辑
原代码中Keys.Enter + Keys.Enter的按键检测方式无效,需通过时间间隔判断双击动作,并添加数据传递逻辑:
Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown Static lastEnterTime As Date = Date.MinValue If e.KeyCode = Keys.Enter Then Dim currentTime As Date = Date.Now ' 500ms内连续两次Enter视为双击,可按需调整间隔 If currentTime.Subtract(lastEnterTime).TotalMilliseconds < 500 Then lastEnterTime = Date.MinValue ' 确保当前行有效 If DataGridView1.CurrentRow IsNot Nothing Then Dim col2Val = DataGridView1.CurrentRow.Cells(1).Value?.ToString() Dim col3Val = DataGridView1.CurrentRow.Cells(2).Value?.ToString() ' 查找已打开的Form1实例并传递数据 Dim mainForm = Application.OpenForms.OfType(Of Form1).FirstOrDefault() If mainForm IsNot Nothing Then ' 调用Form1的公开方法填充数据 mainForm.AddSelectedData(col2Val, col3Val) End If Me.Close() ' 可选:完成操作后关闭Form2 End If Else lastEnterTime = currentTime End If e.Handled = True End If End Sub
步骤2:调整Form1的代码逻辑
删除原Form1中打开Form2后直接取值的代码,仅保留打开窗体的逻辑:
If Not Found Then Form2.Show() End If
步骤3:在Form1中添加公开的数据填充方法
将数据填充逻辑封装为公开方法,允许Form2调用:
' 公开方法,用于接收Form2传递的数据并更新DataGridView Public Sub AddSelectedData(col2Val As String, col3Val As String) FillDataTable(Grid.Rows.Count, col2Val, _BBarcode, col3Val, newValue) Grid.DataSource = _myTable BtxtBarcode.Clear() End Sub ' 确保原FillDataTable方法为Public(若原本是Private需修改) Public Sub FillDataTable(iRow As Integer, columntwo As String, _BBarcode As String, columnthree As String, newValue As String) ' 保留原方法的业务逻辑 End Sub
进阶解耦方案(可选)
如果需要更规范的面向对象设计,可通过自定义事件实现窗体解耦:
- 在Form2中定义事件:
Public Event DataSelected(col2Val As String, col3Val As String) ' 在双击Enter时触发事件 RaiseEvent DataSelected(col2Val, col3Val)
- 在Form1中订阅事件:
If Not Found Then Dim f2 As New Form2() AddHandler f2.DataSelected, AddressOf HandleForm2Data f2.Show() End If Private Sub HandleForm2Data(col2Val As String, col3Val As String) AddSelectedData(col2Val, col3Val) End Sub
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

