c#自带了自动完成,但是不咋好用,匹配搜索功能很弱,只支持匹配开始。
private void comboBox_TextChanged(object sender, EventArgs e)
{
Debug.WriteLine("sender" + sender);
string keyword = comboBox.Text.Trim();
if (string.IsNullOrEmpty(keyword)) {
comboBox.Items.Clear();
comboBox.Items.AddRange(allData.ToArray());
comboBox.DroppedDown = true;
return;
}
if (comboBox.SelectedItem != null &&
comboBox.Text == comboBox.SelectedItem.ToString()) {
Debug.WriteLine("sender,重复 忽略" + sender);
return;
}
/
var filtered = allData
.Where(item => item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
.OrderBy(item => {
if (item.StartsWith(keyword, StringComparison.OrdinalIgnoreCase)) return 0;
if (item.EndsWith(keyword, StringComparison.OrdinalIgnoreCase)) return 1;
return 2;
})
.ThenBy(item => item.Length)
.ToList();
comboBox.Items.AddRange(allData.ToArray());
if (filtered.Count > 0) {
comboBox.Items.Clear();
comboBox.Items.AddRange(filtered.ToArray());
comboBox.Select(comboBox.Text.Length ,1);
comboBox.DroppedDown = true;
}
else {
comboBox.Select(comboBox.Text.Length - 1, 1);
comboBox.DroppedDown = false;
}
}








网友评论