5

主界面

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

4 回答 4

7

您可以使用DialogResult表单上的属性。该值将由您调用的 ShowDialog 函数返回。您还可以在按钮上设置此属性,以便 WinForms 处理表单属性的设置。

在您的frmMessage 中,您必须相应地设置属性(选择您需要的属性,OK然后Cancel)。然后您可以轻松检查返回值:

If My.Forms.frmMessage.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
    ' OK button pressed
    DoCode()
Else
    ' Cancel button pressed
    DoOtherCode()
End If

不要忘记,用户可能能够以另一种方式关闭表单,而不是使用您的按钮关闭它(例如,使用关闭按钮关闭它)。

于 2013-07-31T22:35:41.967 回答
6

您应该在 Form 上设置AcceptButtonCancelButton属性,而且AcceptButton应该将其属性DialogResult设置为OKCancelCancelButton

这样,当您的用户按下这些按钮之一时,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()
于 2013-07-31T22:38:59.443 回答
5

StyxxySteve的答案都适用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
于 2014-06-04T20:54:13.653 回答
1

Me.DialogResult = Windows.Forms.DialogResult.Abort Me.Close()

它将返回结果 Abort

于 2014-04-25T20:58:27.313 回答