【问题标题】:DialogForm not working properly - have to press Cancel button twiceDialogForm 无法正常工作 - 必须按两次取消按钮
【发布时间】:2013-07-28 13:08:08
【问题描述】:

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

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

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

    this.DialogResult=DialogResult.Cancel

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

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

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

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

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

    【讨论】:

    • 基于问题中的语句“它返回 DialogResult.None,因此它再次显示 dialogForm”,我想 OP 完全意识到这种行为并故意选择像这样实现它(?)
    • @O.R.Mapper 非常正确。之后我也有同样的想法。如果是这种情况,请等待 OP 的评论。
    • :) 我猜 OP 按下了一次并再次获取对话框(第二个 opendialog),所以它混淆了 OP
    • 你是对的 Ehsan Ullah :) 这是一个愚蠢的错误(耻辱),但这个 DialogResult.None 让我感到困惑 - 如果是 DialogResult.Cancel,也许我会自己注意到这个问题。 (不确定OP代表什么......)“它返回DialogResult.None,所以它再次显示dialogForm”->我想我在某处读到模态表单仅在收到有效值时才关闭,我认为这不是一个有效值,这就是它第二次显示对话框的原因
    • @Prokurors 很高兴它对您有所帮助。 OP 代表原始海报
    【解决方案2】:

    这将为您提供所需的结果,您调用 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 再次显示表单,并通过单击取消第二次返回取消到 else if 语句。

    【讨论】:

    • “你点击取消,它会检查 dialogresult.ok 和它的错误” - 好的,现在我明白了 :) 谢谢!
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多