'退出子'在DialogResult.OK按钮上

时间:2011-01-04 05:26:25

标签: .net vb.net winforms

我有一个VB.NET表单(CopyScenarioForm),其中有一个确定按钮(DialogResult property = OK),并且还为表单分配了Accept Button

我使用

从我的主表单(mainForm)中显示此表单
If DialogResult.OK = CopyScenarioForm.ShowDialog() Then
      DoSomething()
End if

现在,当用户点击CopyScenarioForm.OK按钮时,我想验证他的条目,如果无效,我想Exit Sub按钮的点击处理程序OK,但是当我这样做时仍然关闭,DoSomething()被执行。有没有办法阻止这种情况并使表单保持活动状态,只有在输入有效时才退出。我注意到,如果我将OK按钮的DialogResult属性更改为NONE而不是OK,则不会导致其关闭。但是我怎么知道用户如何退出表格来执行DoSomething()

2 个答案:

答案 0 :(得分:6)

正在发生的事情是,当您在设计器中将按钮的DialogResult属性设置为“OK”时,无论如何,每次单击“确定”按钮时都会设置此值。因此,即使您使用Exit Sub提前退出事件处理程序,调用表单也会看到DialogResult“确定”。

正如您所发现的,您首先需要在设计器中将按钮的DialogResult属性设置为“无”,然后在“确定”中手动将DialogResult属性设置为正确的值“按钮的点击事件处理程序。例如:

Private Sub OKButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If EntriesAreValid Then
        'Return OK to the calling form
        Me.DialogResult = DialogResult.OK
    Else
        'Show an error message, but keep the form open
        MessageBox.Show("One or more of your entries were invalid.")
    End If
End Sub

或者,您可以在设计器中将DialogResult属性设置为“OK”,并在验证失败时通过将其设置为“None”来覆盖它。这可能会产生更清晰的代码:

Private Sub OKButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If Not EntriesAreValid Then
        'Show an error message
        MessageBox.Show("One or more of your entries were invalid.")

        'Clear the DialogResult property and keep the form open
        Me.DialogResult = DialogResult.None
    End If
End Sub

答案 1 :(得分:0)

如果一切都结束,请从代码中设置。

DialogResult = DialogResult.OK