按钮需要单击两次才能关闭对话框

时间:2021-04-25 14:50:17

标签: c# winforms combobox revit-api dialogresult

我正在尝试运行一个简单的代码。我创建了一个带有 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 个答案:

答案 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");
    }
}