我有一个ComboBox,其DropDownStyle为DropDown,允许用户在其中键入内容,其AutoCompleteMode为Recommendation.问题在于,如果ComboBox当前处于打开状态,并且用户开始在其中输入辅助下拉列表,但单击它的某个项目实际上是从当时位于鼠标下方的ComboBox原始下拉列表中选择该项目.点击次数.
我希望在打开ComboBox的下拉列表时用户无法在其中键入内容,并且想知道是否存在比以下方法更优雅的解决方案:
>在ComboBox打开时将AutoCompleteMode设置为None
>可能在OnClick事件上将DropDownStyle更改为DropDownList(尚未尝试,但理论上是合理的)
>在列表打开时处理(或限制)输入的文本
>类似
解决方法:
作为选项,您可以处理ComboBox的KeyPress
事件并关闭下拉列表.它使自动完成菜单保持打开状态,但关闭下拉菜单:
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
this.comboBox1.DroppedDown = false;
}
作为另一个选项,您可以处理ComboBox的DropDown
和DropDownClosed
事件,并在DropDown中禁用自动完成功能,然后在DropDownClosed事件中再次启用它:
private void comboBox1_DropDown(object sender, EventArgs e)
{
this.comboBox1.AutoCompleteMode = AutoCompleteMode.None;
}
private void comboBox1_DropDownClosed(object sender, EventArgs e)
{
this.comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
}
您可以创建一个派生自ComboBox的新类,并覆盖相应的OnXXXX方法并将逻辑放在那里.这样,您可以将修复程序封装在控件类中,而不是处理表单中的事件,并且将具有可重用的无错误控件和更简洁的代码.
标签:combobox,c,winforms 来源: https://codeday.me/bug/20191118/2028575.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。