如何在Visual Basic中将数据发送回父表单(如列表或值)?

时间:2015-08-11 13:55:55

标签: forms visual-studio

我打开了一个表单,让用户从中选择数据。然后我想将该数据发送回生成该数据的表单。这是来自父表单的代码:

Private Sub bttn_AW_SelectUnits_Click(sender As Object, e As EventArgs) Handles bttn_AW_SelectUnits.Click
    'TODO: Capture output from next menu
    Dim changeUnits As New AuditWizardUnits
    changeUnits.ShowDialog()
End Sub

我可以让它生成一个新表单,但我有多个表单我想从中收集数据,所以我不想丢失已经收集的数据。我试图谷歌这个,但我能找到的是如何发送数据,而不是接收它。我也无法在二进制文件之外找到如何做到这一点" OK"或"取消。"

知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

DialogResult部分只允许您确定用户是否选择了“OK”(或等同于“OK”),或者只是通过单击右上角的“X”取消对话框(在这种情况下可能没有是要检索的对话框中的任何有效“选择”。

如果用户单击“确定”,则可以从您已有的表单引用中检索任何所需的值。从概念上讲,我们从主要形式“拉”出来,而不是从儿童形式“发送”。这更容易,因为主窗体已经有一个对子窗体的引用(您使用该引用来显示对话框!)。

要执行相反的操作,并从对话框“发送”到main,您必须将对主窗体的引用传递到对话框窗体中。在某些情况下,您需要执行此操作,例如,如果您需要在main中实时更改某些内容,可能需要多次更改,之前用户关闭对话框。有时你只需要“拉”,有时你需要“发送”,有时你可能需要两者兼顾。你必须决定哪种方法最适合你的情况。

假设您只需要在之后拉对话框被用户解除,请检查返回的DialogResult,然后使用该表单引用来检索值:

Private Sub bttn_AW_SelectUnits_Click(sender As Object, e As EventArgs) Handles bttn_AW_SelectUnits.Click
    'TODO: Capture output from next menu
    Dim changeUnits As New AuditWizardUnits
    If changeUnits.ShowDialog() = DialogResult.Ok Then
        ' Access something directly from a Control: 
        Dim value As String = changeUnits.TextBox1.Text

        ' ...or use a property that YOU created in changeUnits:
        Dim values As List(Of String) = changeUnits.SelectedValues
    End If
End Sub

在对话框中,当用户点击“确定/保存/继续”类型按钮时,返回“确定”:

Private Sub btnOK_Click(...) Handles btnOK.Click
    Me.DialogResult = DialogResult.Ok
End Sub

对于List方面,您必须从类外部访问该List,以便可以像上面的代码片段一样检索它:

Public Class AuditWizardUnits

    Public SelectedValues As New List(Of String)

End Class

您可以在设置DialogResult之前填充该列表,也可以在用户与对话框进行交互时填充该列表。