如何从ShowDialog窗口返回一个值?

5

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

有没有办法将Dialog窗口中的值传回到主窗口上暂停的线程?我想知道当他们填写完一个弹出的表单后,是否按下了“确定”或“取消”按钮。

4个回答

7

StyxxySteve提供的答案都可以处理主窗口中的DialogResult。然而,Accept按钮的DialogResult属性不应该在属性窗口中设置,它应该在您的代码验证后进行设置。这样,如果用户在表单中输入错误数据,他们可以得到一个错误消息并修复它,而不是从头开始。

'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

7
你可以在表单上使用 DialogResult 属性。该值将由您调用的 ShowDialog 函数返回。您还可以设置此 按钮属性,以便 WinForms 处理表单属性的设置。
在你的 frmMessage 中,你需要相应地设置属性(选择你需要的一个,OKCancel)。然后你可以轻松地检查返回值:
If My.Forms.frmMessage.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
    ' OK button pressed
    DoCode()
Else
    ' Cancel button pressed
    DoOtherCode()
End If

请不要忘记用户可能会以与使用您的按钮关闭表单不同的方式关闭表单(例如通过关闭按钮)。


7
你应该在窗体上设置AcceptButtonCancelButton属性,同时AcceptButton的属性DialogResult应设置为OK,而CancelButton应设置为Cancel
这样,当用户按下其中一个按钮时,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
当执行此代码时,它将返回结果Abort:Me.DialogResult = Windows.Forms.DialogResult.Abort Me.Close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接