组合框打开,而另一个控件具有焦点

本文关键字:控件 焦点 另一个 组合 | 更新日期: 2023-09-27 18:00:06

我有一个例子,给用户一个组合框,其中可能有很多选择。与此配对的是一个过滤项目的TextBox。我想做的是在TextBox有焦点时打开下拉列表,让用户在键入时看到当前过滤器的功能

这听起来很简单——当TextBox获得焦点时放下它,当它失去焦点时关闭它。它打开,然后迅速关闭。有什么好的答案吗?

我的谷歌傅今晚一定很弱,我不敢相信以前没有人想这么做,但我什么都没发现。(我看到了一个相关的事情,在一个打开的组合框中键入,以提供建议的选项,就像谷歌一样,但我的列表是必需的,而不仅仅是建议。)

组合框打开,而另一个控件具有焦点

您可以在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;
}