0

我有一个奇怪行为的对话框 - 我必须按两次取消按钮(第一次返回 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=Cancel

2)在取消按钮单击事件上,我明确设置了DialogResult(我尝试过使用和不使用这个,因为只需设置按钮的Dialogresult = Cancel就足够了)

    this.DialogResult=DialogResult.Cancel

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

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

4

2 回答 2

4

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

DialogResult result = dlgProcess.ShowDialog(this);
if (result  == DialogResult.OK)
{
      // do stuff
}
else if (result  == DialogResult.Cancel)
{
      MessageBox.Show(@"Process was cancelled...");
}
于 2013-07-28T13:15:13.377 回答
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 及其错误,它通过 else 再次显示表单,并通过第二次单击取消将取消返回到 else if 语句。

于 2013-07-28T13:34:48.703 回答