在我MainForm
我宣布第二种形式:
Form3_addrow testDialog;
我有一个按钮和方法OnClick:
private void button2_Click(object sender, EventArgs e)
{
ShowMyDialogBox();
}
和ShowMyDialogBox()方法:
public void ShowMyDialogBox()
{
testDialog= new Form3_addrow(tran_in);
DialogResult dr = testDialog.ShowDialog(this);
if (dr == DialogResult.Cancel)
{
testDialog.Close();
}
else if (dr == DialogResult.OK)
{
testDialog.Close();
}
}
当我单击按钮时,会显示testDialog
,但是当我单击确定按钮时,testDialog不会关闭...但CANCEL按钮可以正常工作。单击“确定”按钮后,为什么我的表单没有关闭?
答案 0 :(得分:6)
在按钮单击处理程序中设置DialogResult
的替代方法是在OK按钮本身上设置DialogResult
- 在表单设计中,您可以将结果设置为OK(这可以在不需要点击按钮的处理程序。)
听起来你的取消按钮已经设置了这个属性
答案 1 :(得分:3)
您需要在表单上的按钮单击处理程序中设置DialogResult
。见this SO question
编辑:并关闭处理程序中的表单。错过了森林的树木。
答案 2 :(得分:0)
来自System.Windows.Forms.Form.AcceptButton
和System.Windows.Forms.Form.CancelButton
的CLR来源的设置者位于以下位置。
请注意,CancelButton
setter设置指定按钮的DialogResult
属性,而AcceptButton
setter则不会。
首先回顾一下,这似乎是WinForms源代码中的一个错误。
代码:
Public Sub set_AcceptButton(ByVal value As IButtonControl)
If (Not Me.AcceptButton Is value) Then
MyBase.Properties.SetObject(Form.PropAcceptButton, value)
Me.UpdateDefaultButton
End If
End Sub
Public Sub set_CancelButton(ByVal value As IButtonControl)
MyBase.Properties.SetObject(Form.PropCancelButton, value)
If ((Not value Is Nothing) AndAlso (value.DialogResult = DialogResult.None)) Then
value.DialogResult = DialogResult.Cancel
End If
End Sub