ComboBox打开而另一个控件具有焦点

时间:2014-04-25 04:43:06

标签: c# user-controls

我遇到一个案例,其中给用户一个可能有很多选择的ComboBox。与此配对是一个过滤项目的TextBox。我想要做的是在TextBox具有焦点时打开下拉列表 - 让用户看到当前过滤器在键入时完成的内容。 (这不仅仅是自动填充功能,我目前在项目的任何位置都匹配过滤器文字,我可以在路上用RegEx搜索替换它。)

听起来很简单 - 当TextBox获得焦点时放下框,当它失去焦点时关闭它。它打开 - 并立即关闭。有什么好的答案吗?

我的Google-Fu今晚一定很弱,我无法相信没有人想要这样做,但我什么都没找到。 (我已经看到在打开的ComboBox中键入相关内容以提供像Google这样的建议选项,但我的列表是必需的,而不仅仅是建议。)

1 个答案:

答案 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;
}