gpt4 book ai didi

C# 创建自定义自动完成文本框

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:05 25 4
gpt4 key购买 nike

我想创建一个文本框,其中会显示自动完成下拉菜单和一些建议。
当然,我想过在我的文本框上使用 AutoCompleteCustomSource,但问题是,文本框会自动过滤所有不包含输入文本的内容。

例如,如果我键入“listen”,我的算法会将“listen (now)”、“listen (later)”和“listen to AAA”视为建议。当我将它们放入 autocompletecustomsource 时,一切正常。但是一旦我写了“现在”,文本就变成了“现在收听”,自动完成下拉列表就为空,因为自动完成自定义源中没有任何项目以“现在收听”开头。

我接下来尝试的是将输入从文本框更改为组合框,我将我的建议放在 Items 属性中,然后以编程方式打开下拉列表。这里的问题是,当我从代码中打开下拉菜单时,第一个项目会自动被选中,第一个项目的文本会替换输入的文本。

想象一下第一个示例:当您键入“listen”时,下拉菜单将打开,其中包含“listen (now)”、“listen (later)”和“listen to AAA”项目。但是组合框中的文本会自动更改为第一项,因此变为“listen (now)”,您无法输入任何其他内容。

这是我目前使用的代码:

    private void comboBox2_KeyUp(object sender, KeyEventArgs e)
{
string asd = comboBox2.Text;
if (asd.Length < 3)
return;

if (e.KeyCode == Keys.Enter)
{
OpenItem(asd);
return;
}
if (AllToString(comboBox2.Items).Contains(asd))
{
return;
}

DateTime started = DateTime.Now;
System.Threading.Thread tth = new System.Threading.Thread((System.Threading.ThreadStart)delegate()
{
JsonData dat = new JsonData();
//Query autocomplete
...
//End Query
comboBox2.Invoke((MethodInvoker)delegate()
{
if (comboBox2.Tag == null || ((DateTime)comboBox2.Tag) < started)
{
comboBox2.Items.Clear();
comboBox2.Items.AddRange(li.ToArray()); //li is the list of suggestions
comboBox2.Select(comboBox2.Text.Length, 0);
comboBox2.Tag = started;
if (li.Count != 0)
comboBox2.DroppedDown = true;
else
{
comboBox2.Focus();
comboBox2.Select(comboBox2.Text.Length, 0);
}
}
});
});
tth.IsBackground = false; tth.Start();
}

所以我的问题是:我如何创建一个文本或组合框,我可以在其中将我的建议放入下拉列表中,而不更改输入的文本和过滤。我希望所有建议始终显示。

谢谢你的帮助,亚历克斯

最佳答案

最好是创建一个继承组合框并覆盖事件的新类

   public class myCombo : ComboBox
{
protected override void OnPaint(PaintEventArgs e)
{


base.OnPaint(e);
}
}

我做了一些事情来改变显示..来放置一个网格,但这是很久以前的事了。

试着搜索一下。

关于C# 创建自定义自动完成文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com