DialogForm无法正常工作 - 必须按两次取消按钮

时间:2013-07-28 13:08:08

标签: c# winforms

我有一个奇怪行为的对话框 - 我必须按两次取消按钮(第一次它返回DialogResult.None而我无法找到这种行为的原因)

1。打开对话框表格的代码

    using (var dlgProcess = new DlgFormProcessMismatches())
        {
            if (dlgProcess.ShowDialog(this) == DialogResult.OK)
            {
                // do stuff
            }
            else if (dlgProcess.ShowDialog(this) == DialogResult.Cancel)
            {
                MessageBox.Show(@"Process was cancelled...");
            }
        }

2。在dialogForm中我有:

1)设置“取消”按钮的属性DialogResult =取消

2)在取消按钮单击事件上我明确设置了DialogResult(我已尝试使用和不使用此功能,因为它应该足以设置按钮的Dialogresult =取消)

    this.DialogResult=DialogResult.Cancel

但问题是,在我第一次按下取消按钮时,它返回DialogResult.None,所以它再次显示dialogForm,然后当我再次按下它时取消按钮返回DialogResult.Cancel

可能是什么问题?有什么想法吗?

2 个答案:

答案 0 :(得分:4)

你的代码错了。您正在显示DialogResult两次。您需要显示一次并获得结果。然后在此基础上你可以决定做什么。像这样改变

DialogResult result = dlgProcess.ShowDialog(this);
if (result  == DialogResult.OK)
{
      // do stuff
}
else if (result  == DialogResult.Cancel)
{
      MessageBox.Show(@"Process was cancelled...");
}

答案 1 :(得分:1)

这将为您提供所需的结果,您将两次调用showdialog(这是您的主要问题),而是执行此操作:

            var dlgProcess = new DlgFormProcessMismatches();

            if (dlgProcess.ShowDialog(this) == DialogResult.OK)
            {
                //do stuff.....
            }
            else if (dlgProcess.DialogResult == DialogResult.Cancel)
            {
                MessageBox.Show(@"Process was cancelled...");
            }

问题是你点击取消所以它检查dialogresult.ok并且它是false它通过else再次显示表单,并通过点击取消第二次它返回取消到其他if语句。