我有一个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()
?
答案 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