我在表单上有一个 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 事件也无法正常工作,包括 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; });
}
}
关于c# - 从下拉列表中选择项目时更改 ComboBox 的文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7358292/