c# - 从下拉列表中选择项目时更改 ComboBox 的文本字段?

标签 c# .net winforms combobox

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

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

101 Cat
102 Dog
103 Bird

选择其中一个项目时,我只希望描述出现在Combobox的文本字段中。 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,以向 ComboBox 指示我正在设置的 Text 不是下拉列表。但这只会完全清除文本字段,无论我将 Text 属性更改为什么。

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

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

最佳答案

你可以试试这个:

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; });
  }
}

关于c# - 从下拉列表中选择项目时更改 ComboBox 的文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7358292/

相关文章:

c# - 将控制台输出重定向到 winforms ListBox

c# - 关于C#中线程的问题

c# - 如何访问 MVC 3 中 Request.Form 集合中未验证的项目

c# - 在 asp.net mv4 web api 中处理读取多部分表单数据时处理对象错误

.net - 微软语音识别 : Alternate results with confidence score?

c# - 索引超出范围抛出但索引并没有真正超出范围

c# - 如何将 List<Company> 转换为 List<ICompany>

c# - 使用 C# 在用户定义的库中实现回调

c# - 知道在 RadioGroup (ext.net) 中检查了什么 radio

c# - BackGroundWorker 不在后台执行