我正在尝试运行一个简单的代码。我创建了一个带有 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");
}
}
你知道这是为什么吗?
答案 0 :(得分:0)
按钮控件有一个 DialogResult property,您可以将其设置为 DialogResult 值之一。
单击其 DialogResult
属性设置为非 DialogResult.None
值的按钮会导致对话框关闭,同时设置 Form.ShowDialog()
返回的值:< /p>
DialogResult result = Form.ShowDialog().
按钮的 DialogResult
属性通常在设计器或表单构造器中设置(同样的事情)。
DialogResult = DialogResult.Cancel
的按钮时,对话框将关闭。 Form.ShowDiaog()
返回相同的值。DialogResult = DialogResult.OK
的按钮。因此,在设计器中设置这些属性,从 Close()
按钮 exitButton
处理程序中删除 Click
(此操作已自动执行)。
OK
两次,因为第一次点击只是设置了 DialogResult
属性,然后只有在第二次点击时才会确认并执行其默认操作。在 proceedButton
Button Click
处理程序的错误条件中,在显示 MessageBox 之前设置 this.DialogResult = DialogResult.None;
以取消操作。
然后可以在以下位置更改代码:
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");
}
}