【问题标题】:Passing data between forms on form closing在表单关闭时在表单之间传递数据
【发布时间】:2024-05-16 07:20:02
【问题描述】:

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

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

我该如何做到这一点?

【问题讨论】:

  • 您有什么特别的原因要避免使用 ShowDialog?
  • 原因是我不知道如何使用它,但是在阅读它之后,这是肯定的!谢谢汉斯!!

标签: vb.net winforms visual-studio-2010


【解决方案1】:

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

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

祝你好运……

【讨论】:

    【解决方案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 并且主表单中的执行将停止并等待用户选择一个单元格,然后返回并轻松地从刚刚显示的表单中提取所选值。

    【讨论】:

    • 你太棒了,我不能再接受 4 分钟,但我会的!谢谢!