我在表单上有一个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指示{I}设置的Text
不是下拉列表中的项目。但这只是完全清除文本字段,无论我将Text
属性更改为。
那么我认为SelectionChangedCommitted
是一个错误的事件要使用,因为它似乎为我的目的太快了(Text
属性似乎只是用我的选择更新在 SelectionChangeCommitted
事件处理程序完成后)。但是所有其他ComboBox事件也无法工作,包括SelectedIndexChanged
和DropDownClosed
。
我认为这对于实现这一点非常简单。必须有一个简单的方法来做到这一点,我确信我错过了一些明显的......任何想法?
答案 0 :(得分:3)
你可以试试这个:
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; });
}
}
答案 1 :(得分:0)
只是为了澄清一下,当用户下拉组合并在选中时显示它们时,你是在替换“101 Cat”,“102 Dog”等吗? 101是“猫”的关键,102是“狗”的关键,依此类推?如果是这样,为什么要显示它们,而不仅仅显示每个项目的文本(如果这是您的要求,请向我的答案道歉)。根据我的理解,我会将组合框值成员配置为返回101,102等的属性,并将displaymember配置为返回每个项目文本的属性。这样,你就可以得到你想要的东西,即显示“猫”,“狗”和“鸟”文字。此外,如果您想要进一步处理,可以将事件附加到组合的TextChanged事件。