【问题标题】:Change the ComboBox's text field when an item is selected from the drop down list?从下拉列表中选择项目时更改组合框的文本字段?
【发布时间】:2011-11-13 13:41:37
【问题描述】:

我在表单上有一个 ComboBox。 ComboBox 的DropDownStyle 属性设置为DropDown,以便用户可以从下拉列表中选择一个项目或手动输入一些文本。

当用户从下拉列表中选择一个项目时,我想在项目的文本出现在组合框的文本字段之前对其进行一些更改。举一个非常简单的例子,假设下拉列表包含由 ID 和描述组成的项目,如下所示:

101 Cat
102 Dog
103 Bird

When one of these items is selected, I'd like only the description to appear in the ComboBox's text field. So when "102 Dog" is selected, the string "Dog" should be displayed in the text field, ready to be edited by the user, and the items in the drop down list should be unchanged.

我想我可以只听 ComboBox 的 SelectionChangeCommitted 事件,然后将 ComboBox 的 Text 属性设置为我喜欢的任何值。但如果这样做,我对Text 所做的更改将被忽略,整个字符串(“102 Dog”)仍会显示在 ComboBox 中。

然后我想我也应该将SelectedIndex 字段更新为-1,以向组合框表明我正在设置的Text 不是下拉列表中的项目。但这只会完全清除文本字段,无论我将 Text 属性更改为什么。

然后我认为SelectionChangedCommitted 是使用错误的事件,因为它似乎为我的目的太快触发(Text 属性似乎只更新我的选择之后 SelectionChangeCommitted 事件处理程序已完成)。但所有其他 ComboBox 事件也无法正常工作,包括 SelectedIndexChangedDropDownClosed

我认为这很容易实现。必须有一个简单的方法来做到这一点,我确定我错过了一些明显的东西......有什么想法吗?

【问题讨论】:

    标签: c# .net winforms combobox


    【解决方案1】:

    你可以试试这个:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
      if (comboBox1.SelectedIndex > -1)
      {
        string value = comboBox1.Items[comboBox1.SelectedIndex].ToString().Substring(4);
        this.BeginInvoke((MethodInvoker)delegate { this.comboBox1.Text = value; });
      }
    }
    

    【讨论】:

    • 开始调用!当然。好消息是这行得通,坏消息是我现在觉得自己像个白痴。 ;) 谢谢。
    【解决方案2】:

    只是为了澄清一下,当用户下拉组合并在选择时显示它们时,您是否显示“101 Cat”、“102 Dog”等? 101 是“猫”的钥匙,102 是“狗”的钥匙,等等?如果是这样,您为什么要显示它们而不仅仅是显示每个项目的文本(如果这是您的要求,请向我的回答道歉)。据我了解,我会将组合框 valuemember 配置为返回 101、102 等的属性,并将 displaymember 配置为返回每个项目文本的属性。这样,您就已经得到了您想要的,即显示“Cat”、“Dog”和“Bird”文本。此外,如果您想进一步处理,可以将事件附加到组合的 TextChanged 事件。

    【讨论】:

    • 我想在下拉列表中显示“101 Cat”、“102 Dog”等,但在选择项目后,文本框中只显示“Cat”、“Dog”等下拉菜单。是的,这是一个要求。我以猫和狗作为一个非常简化的例子,但重点是下拉菜单中显示的项目与用户选择项目后文本框中显示的项目不同。
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多