【问题标题】:Problem with ComboBox autocomplete when adding values dynamically动态添加值时组合框自动完成的问题
【发布时间】:2011-09-20 07:31:39
【问题描述】:

在 WinForms 应用程序中,我有一个组合框,我试图用基于用户输入的值填充该组合框。例如,如果用户键入m,它应该向他显示以字母m 开头的所有值,但我不想在开头添加所有值,因为值很多。

为了实现这一点,我创建了一个事件 textchanged,当用户输入例如字母 m 时,我的程序会进入我的数据库并将所有带有字母 m 的值添加到组合框。
我认为组合框首先查看它是否应该自动完成(建议)值,然后才添加值的问题。

我怎样才能让它首先添加值或让组合框再次检查它是否应该建议值?

这是我的代码:

private void comboBox1_TextChanged(object sender, EventArgs e)
{
    comboBox1.Items.Clear();
    for (int i = 0; i < MilkProducts.Length; i++)
    {
        if (MilkProducts[i].StartsWith(comboBox1.Text))
        {
            comboBox1.Items.Add(MilkProducts[i]);
        }
    }
}

【问题讨论】:

  • 不确定到底是什么问题..你能更好地解释发生了什么与你想要发生什么吗?
  • 你试过在组合框按键事件中这样做吗?
  • 我希望当用户将文本写入组合框时,会在组合框中添加一个选项数组,每次他添加一个字母或更改某些内容时,它需要删除所有以前的项目并添加新的那些,它做到了,组合框首先检查它是否需要显示任何内容的问题-并且因为没有项目(我的事件仅在系统事件之后运行)它不显示任何内容。
  • @Ankur,我怎么知道按下了哪个键?它应该是多语言的,当我使用 e.keycode 时,它​​只显示英文字母......,没关系,我想出了如何做到这一点。
  • @Ankur,当我使用按键时,它就像 textchanged 一样工作,首先触发组合框的系统事件,它检查是否有任何项目要显示 - 然后我的事件 - 添加项目

标签: c# winforms combobox


【解决方案1】:

看来您可能必须在此处使用 Win32 API(使用 PInvoke),方法是向组合框发送适当的消息,以“在”事件处理完成后显示搜索结果

请参考以下网址,您可能会找到您要查找的内容:

http://msdn.microsoft.com/en-us/library/bb775792(VS.85).aspx

【讨论】:

    【解决方案2】:

    我认为问题是您正在清除 ComboBox comboBox1.Items.Clear() 中的所有项目,然后在 comboBox1.Text 访问其内容可能您应该尝试以不同的方式进行操作。或在最后清除它。

    【讨论】:

    • 不,我需要一开始就清除,最后清除有什么帮助?我需要清除所有以前的项目并添加新项目...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2014-04-29
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多