Form.ShowDialog确定按钮不起作用

时间:2014-01-17 15:47:10

标签: c# showdialog

在我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按钮可以正常工作。单击“确定”按钮后,为什么我的表单没有关闭?

3 个答案:

答案 0 :(得分:6)

在按钮单击处理程序中设置DialogResult的替代方法是在OK按钮本身上设置DialogResult - 在表单设计中,您可以将结果设置为OK(这可以在不需要点击按钮的处理程序。)

听起来你的取消按钮已经设置了这个属性

答案 1 :(得分:3)

您需要在表单上的按钮单击处理程序中设置DialogResult。见this SO question

编辑:并关闭处理程序中的表单。错过了森林的树木。

答案 2 :(得分:0)

来自System.Windows.Forms.Form.AcceptButtonSystem.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