如何从ShowDialog窗口返回值?

时间:2013-07-31 22:33:31

标签: vb.net winforms popup showdialog

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

有没有办法将对话窗口中的值传递回主窗口上的暂停线程?我想知道他们是否在填写弹出的表格后按下了“确定”或“取消”按钮。

4 个答案:

答案 0 :(得分:6)

您应该在表单上设置AcceptButtonCancelButton属性,但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