从下拉列表中选择一项时,更改组合框的文本字段?

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

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

101 Cat
102 Dog
103 Bird

当选择这些项目之一时,我只希望描述显示在ComboBox的文本字段中.因此,当选择“ 102 Dog”时,字符串“ Dog”应显示在文本字段中,以供用户编辑,并且下拉列表中的项目应保持不变.

我以为我可以只听ComboBox的SelectionChangeCommitted事件,然后将ComboBox的Text属性设置为我喜欢的任何属性.但是,如果执行此操作,则我对Text所做的更改将被忽略,并且整个字符串(“ 102 Dog”)仍显示在ComboBox中.

因此,我想我也应该将SelectedIndex字段更新为-1,以向ComboBox指示“我正在设置的文本”不是下拉列表中的项.但是,无论我将Text属性更改为什么,这只会完全清除文本字段.

因此,我发现SelectionChangedCommitted是使用错误的事件,因为它似乎为我的目的触发得太早了(Text属性似乎仅在SelectionChangeCommitted事件处理程序完成后才用我的选择进行更新).但是所有其他ComboBox事件也无法正常工作,包括SelectedIndexChanged和DropDownClosed.

我认为这对实现而言将是微不足道的.必须有一种简单的方法来执行此操作,并且我确信我遗漏了一些明显的东西……有什么想法吗?

解决方法:

您可以尝试以下方法:

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; });
  }
}
上一篇:TCP/IP网络编程 读书笔记1


下一篇:flex reset Grid