一个按钮需要被点击两次才能关闭一个对话框

Posted

技术标签:

【中文标题】一个按钮需要被点击两次才能关闭一个对话框【英文标题】:A Button needs to be clicked twice to close a Dialog 【发布时间】:2021-07-19 02:51:58 【问题描述】:

我正在尝试运行一个简单的代码。我创建了一个带有 ComboBox (DropDownStyle = DropDown) 的表单,它一开始是空的,当 DropDown 打开时它填充了两个。 此表单还有 2 个按钮,其中一个是代码中播种的 proceedButton 按钮。

在这段代码中,我正在检查 ComboBox 是否为空,如果是,则提示用户从 ComboBox 中选择一个项目。 选择该项目后,我想单击 proceedButton 并且表单应该关闭,但此操作需要第二次单击。

private void exitButton_Click(object sender, EventArgs e)

    exitButton.DialogResult = DialogResult.Cancel;
    Debug.WriteLine("Cancel was clicked");
    Close();


private void proceedButton_Click(object sender, EventArgs e)

    if (string.IsNullOrEmpty(comboBox1.Text))
    
        MessageBox.Show("Nothing was selected, please try again!");
    
    else
    
        proceedButton.DialogResult = DialogResult.OK;
        Debug.WriteLine("Proceed was clicked");
    

你知道这是为什么吗?

【问题讨论】:

【参考方案1】:

按钮控件有一个DialogResult property,您可以将其设置为DialogResult 值之一。

单击将其DialogResult 属性设置为非DialogResult.None 值的按钮会导致对话框关闭,同时设置Form.ShowDialog() 返回的值:

DialogResult result = Form.ShowDialog().  

Buttons 的DialogResult 属性通常在Designer 或Form Constructor 中设置(同样的事情)。

当单击带有DialogResult = DialogResult.Cancel 的按钮时,对话框关闭。 Form.ShowDiaog() 返回相同的值。 这同样适用于带有DialogResult = DialogResult.OK 的按钮。

因此,在设计器中设置这些属性,从 exitButton 按钮 Click 处理程序中删除 Close()(此操作已自动执行)。

您需要单击两次OK,因为第一次单击只是设置DialogResult 属性,然后仅在第二次单击时确认并执行其默认操作。

proceedButton按钮Click处理程序的错误情况下,设置this.DialogResult = DialogResult.None;取消操作,然后再显示MessageBox。

然后可以在以下位置更改代码:

private void exitButton_Click(object sender, EventArgs e)

    Debug.WriteLine("Cancel was clicked");


private void proceedButton_Click(object sender, EventArgs e)

    if (string.IsNullOrEmpty(comboBox1.Text)) 
        this.DialogResult = DialogResult.None;
        MessageBox.Show("Nothing was selected, please try again!");
    
    else 
        Debug.WriteLine("Proceed was clicked");
    

【讨论】:

以上是关于一个按钮需要被点击两次才能关闭一个对话框的主要内容,如果未能解决你的问题,请参考以下文章

使用引导程序关闭 angular.js 中的所有对话框

关闭c++MFC的主窗体,先弹出对话框询问“是不是要关闭”,点击确定取消按钮进行确认。

Android实现点击AlertDialog上按钮时不关闭对话框

Android 点击AlertDialog上的确定和取消按钮,使对话框不消失方法

asp网页中,如何实现点击按钮弹出对话框,然后点击“确定”关闭窗口,点击“取消”返回?尽快,非常感谢!

模态对话框,点击右上角的X按钮关闭不了窗口么