【问题标题】:Check if a ComboBox value is selected检查是否选择了 ComboBox 值
【发布时间】:2025-11-25 01:35:01
【问题描述】:

我正在编写一个包含一些按钮和一个组合框的表单。 “确定”按钮默认是禁用的,我希望只有在选择了实际值(不是组合框的名称)后才启用它。

我知道如何访问选定的值,以及如何检查一个值是否已被选择——但这两个只能在表单关闭后完成(使用“x”或使用“ok”按钮——这已禁用)。

有什么想法吗?

谢谢。

【问题讨论】:

  • 对我来说已经有一段时间了,所以我不会写答案。但是你不能在 UI 对象绑定到的属性中检查它吗?
  • 您是否尝试过使用ComboBox.SelectedIndexChanged 事件

标签: c# winforms forms combobox


【解决方案1】:

大概是这样的:

    private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox.SelectedIndex > -1)
        {
            buttonOK.Enabled = true;
        }
    }

默认情况下,组合框的选定索引为 -1(组合框的名称,您在选择另一个索引后无法重新选择),因此如果您检查它不是 -1,那么您就知道已选择了一个值。

但是,如果我总是希望选择一个值,则另一种选择是使用 DropDownStyle 属性并将其设置为 DropDownList。这样默认选择索引 0,用户只能从列表中选择项目,而不能选择其他项。

【讨论】:

    【解决方案2】:
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex == -1)
                button1.Enabled = false;
            else
                button1.Enabled = true;
    
            //or
            //button1.Enabled = comboBox1.SelectedIndex == -1;
        }
    

    【讨论】:

    • 这不起作用 comboBox1.SelectedValue 即使从组合框中选择某些内容也会返回 null。
    • 现在在没有选择任何内容时启用按钮,只有在选择某些内容时才需要启用按钮。 :P 编辑:哈哈,我看到你的忍者编辑了 ;)
    【解决方案3】:

    您可以使用组合框选择索引更改事件

    将此添加到您的 InitializeComboBox 类

    this.ComboBox1.SelectedIndexChanged += 
                new System.EventHandler(ComboBox1_SelectedIndexChanged);
    

    然后在选定的索引更改事件中,您可以检查是否选择了组合框

    private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       ComboBox cbx= (ComboBox) sender;
       Button1.Enabled = !string.IsNullOrEmpty(cbx.SelectedItem.ToString());
    }
    

    【讨论】:

    • 我不知道为什么它有一个+1,它实际上禁用了一个选择的按钮。 span>
    • @MitchTWC 如果选择了某些东西string.IsNullOrEmpty 将是false,我正在检查!string.IsNullOrEmpty,它将返回true 并启用按钮。不知道为什么你认为它会被禁用。你能解释一下吗
    • 我刚刚尝试了您的示例,当我从组合框中选择一个项目时,它会禁用我的按钮。 cbx.SelectedText 返回一个空字符串。你需要使用 cbx.Text