1

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

你知道这是为什么吗?

4

1 回答 1

0

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

  • 单击其DialogResult属性设置为 not 值 的 ButtonDialogResult.None会导致 Dialog 关闭,同时设置返回的值Form.ShowDialog()

    DialogResult result = Form.ShowDialog().  
    

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

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

因此,在 Designer 中设置这些属性,Close()exitButtonButtonClick处理程序中删除(此操作已自动执行)。

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

proceedButtonButtonClick处理程序的错误情况下,设置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");
    }
}
于 2021-04-25T15:48:01.667 回答