2

我有一个带有文本框、按钮和公共共享属性的表单。该按钮显示另一个带有数据网格视图的表单。在数据网格视图中单击一行时,它会获取选定的值并将其分配给原始表单的公共共享属性,并关闭表单

Private Sub dgvAllSku_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvAllSku.CellContentDoubleClick
    frmMain.Sku = dgvAllSku.Rows.Item(e.RowIndex).Cells(0).Value
    Me.Close()
End Sub

现在我想要发生的是,当此表单关闭时,我希望值 (frmMain.Sku) 填充原始表单上的文本框。我希望在数据网格视图窗体关闭时再次触发 GotFocus 事件,并且我可以使用该事件为文本框分配公共属性的值,但是当窗体关闭时不会触发焦点事件。

Private Sub frmMain_Activated(sender As Object, e As EventArgs) Handles Me.GotFocus
    txtSku.Text = frmMain.Sku
End Sub

我该如何做到这一点?

4

2 回答 2

4

如果您的辅助表单是模态的,则在该表单上公开一个公共属性。为了关闭该模式,只需调用 form1.DialogResult = DialogResult.OK。在您的父表单中执行类似的操作

Dim childModal = new ChildModal
Dim result childModal.ShowDialog() 
If result = OK then Me.Text1.Text = childModal.ResultValue

祝你好运...

于 2013-09-12T00:28:14.893 回答
2

可能有很多方法,但我能想到的最快方法就是将 公开txtSku.Text为公共属性,让另一个窗口自行设置:

'Define in your main form
Public Property SkuText() As String
Get
    Return txtSku.Text
End Get
Set(ByVal value As String)
    txtSku.Text = value
End Set
End Property

然后只需从其他窗口设置文本:

Private Sub dgvAllSku_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvAllSku.CellContentDoubleClick
    frmMain.SkuText = dgvAllSku.Rows.Item(e.RowIndex).Cells(0).Value
    Me.Close()
End Sub  

您还可以引发另一个表单订阅的事件,或者如果您没有任何理由仍然能够同时使用这两个表单,只需ShowDialog在主表单中使用和执行将停止并等待用户选择一个单元格,然后返回并轻松地从它刚刚显示的表单中提取所选值。

于 2013-09-11T17:23:06.440 回答