一个按钮需要被点击两次才能关闭一个对话框
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");
【讨论】:
以上是关于一个按钮需要被点击两次才能关闭一个对话框的主要内容,如果未能解决你的问题,请参考以下文章
关闭c++MFC的主窗体,先弹出对话框询问“是不是要关闭”,点击确定取消按钮进行确认。
Android实现点击AlertDialog上按钮时不关闭对话框
Android 点击AlertDialog上的确定和取消按钮,使对话框不消失方法