我遇到一个案例,其中给用户一个可能有很多选择的ComboBox。与此配对是一个过滤项目的TextBox。我想要做的是在TextBox具有焦点时打开下拉列表 - 让用户看到当前过滤器在键入时完成的内容。 (这不仅仅是自动填充功能,我目前在项目的任何位置都匹配过滤器文字,我可以在路上用RegEx搜索替换它。)
听起来很简单 - 当TextBox获得焦点时放下框,当它失去焦点时关闭它。它打开 - 并立即关闭。有什么好的答案吗?
我的Google-Fu今晚一定很弱,我无法相信没有人想要这样做,但我什么都没找到。 (我已经看到在打开的ComboBox中键入相关内容以提供像Google这样的建议选项,但我的列表是必需的,而不仅仅是建议。)
答案 0 :(得分:1)
您可以为ComboBox设置属性
添加TextBox代码的Focus事件ComboBox.DroppedDown = true;
添加TextBox代码的TextChanged事件
ComboBox.SuspentLayout();
//ComboBox.Items add/remove
ComboBox.ResumeLayout();
当文字为空时,不要忘记重置项目。
修改强>
这似乎有用(但你不能看到鼠标)
string[] items = { "abcd", "abc", "bcd", "cd" };
private void textBox1_TextChanged(object sender, EventArgs e)
{
comboBox1.SuspendLayout();
comboBox1.Items.Clear();
comboBox1.Items.AddRange(items.Where(item => item.ToLower().Contains(textBox1.Text.ToLower())).ToArray());
comboBox1.ResumeLayout();
comboBox1.DroppedDown = true;
}