需要单击按钮两次才能关闭对话框
A Button needs to be clicked twice to close a Dialog
我正在尝试运行一个简单的代码。我创建了一个带有 ComboBox (DropDownStyle = DropDown
) 的 Form,开始时它是空的,当打开 DropDown 时它被填充了两个。
此表单还有 2 个按钮,其中之一是代码中的 proceedButton
按钮。
在这段代码中,我检查 ComboBox 是否为空,如果为空,我提示用户 select ComboBox 中的一个项目。
selected 项目时,我想单击 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");
}
}
你知道这是为什么吗?
按钮控件有 DialogResult property you can set to one of the 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");
}
}
我正在尝试运行一个简单的代码。我创建了一个带有 ComboBox (DropDownStyle = DropDown
) 的 Form,开始时它是空的,当打开 DropDown 时它被填充了两个。
此表单还有 2 个按钮,其中之一是代码中的 proceedButton
按钮。
在这段代码中,我检查 ComboBox 是否为空,如果为空,我提示用户 select ComboBox 中的一个项目。
selected 项目时,我想单击 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");
}
}
你知道这是为什么吗?
按钮控件有 DialogResult property you can set to one of the 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");
}
}