frmMain
DoSomething()
My.Forms.frmMessage.ShowDialog(Me)
If AcceptButtonClicked Then
' Do Code
DoCode()
Else
' Cancel Button Pressed
DoOtherCode()
End If
DoMore()
frmMessage
My.Forms.frmMain.AcceptButtonClicked = True
有没有办法将对话窗口中的值传递回主窗口上的暂停线程?我想知道他们是否在填写弹出的表格后按下了“确定”或“取消”按钮。
答案 0 :(得分:6)
您应该在表单上设置AcceptButton
和CancelButton
属性,但AcceptButton
的属性DialogResult
应设置为确定和CancelButton
到取消。
通过这种方式,当您的用户按下其中一个按钮时,ShowDialog调用将返回,您可以使用枚举DialogResult
中的预定义值检查返回值DoSomething()
Dim result = My.Forms.frmMessage.ShowDialog(Me)
If result = DialogResult.OK Then
' Do Code
DoCode()
Else
' Cancel Button Pressed
DoOtherCode()
End If
DoMore()
答案 1 :(得分:4)
您可以在表单上使用DialogResult
属性。您调用的ShowDialog函数将返回此值。您也可以设置此property on your buttons,以便WinForms将处理表单属性的设置。
在frmMessage
中,您必须相应地设置属性(pick the one you need, OK
and Cancel
)。然后您可以轻松检查返回值:
If My.Forms.frmMessage.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
' OK button pressed
DoCode()
Else
' Cancel button pressed
DoOtherCode()
End If
不要忘记,用户可能能够以另一种方式关闭表单,而不是使用按钮关闭表单(例如,使用关闭按钮关闭表单)。
答案 2 :(得分:4)
Styxxy 和 Steve 的答案都适用于处理主窗口中的DialogResult
。但是,不应在属性窗口中设置DialogResult
按钮的Accept
属性,应在验证后中设置 。这样,如果用户在表单中输入错误数据,他们就可以获得错误消息并修复它而不会丢失任何工作,而不是重新开始。
'code in Dialog Form
Private Sub btnAccept_Click(sender As System.Object, e As System.EventArgs) Handles btnAccept.Click
If IsValid() = True Then
DialogResult = Windows.Forms.DialogResult.OK
End If
End Sub
答案 3 :(得分:1)
Me.DialogResult = Windows.Forms.DialogResult.Abort Me.Close()
它将返回结果Abort