我在表单上有一个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; });
}
}
标签:combobox,c,net,winforms 来源: https://codeday.me/bug/20191208/2087810.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。