我有同样的问题,并寻找一个快速解决方案。
最终我最终自己写了。这有点肮脏,但如果需要,它不应该很难变得更漂亮。
这个想法是在每次按键后重新构建组合列表。这样我们就可以依靠组合的内置界面上,我们并不需要自己实现一个文本框和列表框界面...
只记得设置combo.Tag
到null
如果你重新编译组合的选项列表。
private void combo_KeyPress(object sender, KeyPressEventArgs e) {
comboKeyPressed();
}
private void combo_TextChanged(object sender, EventArgs e) {
if (combo.Text.Length == 0) comboKeyPressed();
}
private void comboKeyPressed() {
combo.DroppedDown = true;
object[] originalList = (object[])combo.Tag;
if (originalList == null) {
// backup original list
originalList = new object[combo.Items.Count];
combo.Items.CopyTo(originalList, 0);
combo.Tag = originalList;
}
// prepare list of matching items
string s = combo.Text.ToLower();
IEnumerable<object> newList = originalList;
if (s.Length > 0) {
newList = originalList.Where(item => item.ToString().ToLower().Contains(s));
}
// clear list (loop through it, otherwise the cursor would move to the beginning of the textbox...)
while (combo.Items.Count > 0) {
combo.Items.RemoveAt(0);
}
// re-set list
combo.Items.AddRange(newList.ToArray());
}
来源
2012-10-09 00:04:35
obe
如何把它写在C#中的一个WinForms – ca9163d9 2014-11-14 03:28:50