C#为啥我的Combobox老是自动选择第一个选项?求解决方法。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#为啥我的Combobox老是自动选择第一个选项?求解决方法。相关的知识,希望对你有一定的参考价值。
参考技术A 默认SelectedIndex为0,所以是第一个,不过你可以设置comboBox1.SelectedIndex 的值。追问求具体设置代码。大神给跪了
追答关键是你不想他默认第一个,那你想要他默认显示什么呢?
它的索引从0开始。
comboBox1.SelectedIndex =1;这是默认选择第二个。
c# 实现ComboBox自动模糊匹配
ComboBox自带有属性可以实现自动匹配,但是它有一个弊端,只能从头开始匹配,例如"李四LS",只能输入“李四”或"李"才能匹配出来,而输入"LS"是找不出来的。
绑定到ComboBox的下拉选项中的后台数据:
string[] data = new string[] { "张三|ZS", "李四|LS", "王五|WW", "赵六|ZL", "田七|TQ" };
先展示如何通过AutoComplete实现自动匹配
comAutoSelect.Items.AddRange(data);
comAutoSelect.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comAutoSelect.AutoCompleteSource = AutoCompleteSource.ListItems;
这样,在前台输入"张三"会自动匹配出下拉选项"张三|ZS",输入"ZS",没有其他下拉选项。
手动绑定是通过TextUpdate来实现,这里也考虑过TextChanged事件来实现,但是TextChanged事件和DroppedDown = true,以及键盘的上下键选择有冲突,因此选用TextUpdate事件。
comAutoSelect.Items.AddRange(data);
comAutoSelect.TextUpdate += (a, b) =>
{
var input = comAutoSelect.Text.ToUpper();
comAutoSelect.Items.Clear();
if (string.IsNullOrWhiteSpace(input)) comAutoSelect.Items.AddRange(data);
else
{
var newList = data.Where(x => x.IndexOf(input, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();
comAutoSelect.Items.AddRange(newList);
}
comAutoSelect.Select(comAutoSelect.Text.Length, 0);
comAutoSelect.DroppedDown = true;
//保持鼠标指针形状
Cursor = Cursors.Default;
};
主要的思路是当前台的文字改变时,刷新Items属性。有几个要注意。
1.不能用DataSource,因为绑定数据之后就不行对Items执行clear和add事件;另外,绑定数据后会默认选择第一行,如果需要输入多个字符,这样会产生全选,覆盖的输入效果。
2.在完成外Items的赋值后,执行comAutoSelect.Select(comAutoSelect.Text.Length, 0);将光标移到输入的最后,否则输入的文字会跟理想的字符串倒序。将光标移到最后可以用以下两种方法:
comAutoSelect.Select(comAutoSelect.Text.Length, 0);
comAutoSelect.SelectionStart = comAutoSelect.Text.Length;
3.可能对DroppedDown赋值的影响,光标被覆盖在界面下面了。需要增加一句Cursor = Cursors.Default;保持鼠标指针的形状。
TextUpdate的方法,实现了ComboBox模糊查找,自动匹配的效果。
文中的错漏,请回复纠正。
转载请注明出处:http://www.cnblogs.com/icyJ
以上是关于C#为啥我的Combobox老是自动选择第一个选项?求解决方法。的主要内容,如果未能解决你的问题,请参考以下文章
C# - Winforms - Combobox - 避免选择更新数据源的第一项
关于c#里如何实现combobox的联动,上一个选择一个选项,下一个就不能选择,可以显示成灰色不可选?