我打开了一个表单,让用户从中选择数据。然后我想将该数据发送回生成该数据的表单。这是来自父表单的代码:
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"或"取消。"
知道怎么做吗?
答案 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之前填充该列表,也可以在用户与对话框进行交互时填充该列表。