gpt4 book ai didi

C# 自动完成

转载 作者:IT王子 更新时间:2023-10-29 03:54:50 28 4
gpt4 key购买 nike

我正在尝试向文本框添加自动完成功能,结果来自数据库。它们的格式为

[001] Last, First Middle

目前您必须键入 [001]... 才能显示条目。 所以问题是,即使我先输入名字,我也希望它完成。所以如果一个条目是

[001] Smith, John D

如果我开始输入 John,那么该条目应该会显示在自动完成的结果中。

目前代码看起来像

AutoCompleteStringCollection acsc = new AutoCompleteStringCollection();
txtBox1.AutoCompleteCustomSource = acsc;
txtBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
txtBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

....

if (results.Rows.Count > 0)
for (int i = 0; i < results.Rows.Count && i < 10; i++)
{
row = results.Rows[i];
acsc.Add(row["Details"].ToString());
}
}

results 是包含查询结果的数据集

查询是使用 like 语句的简单搜索查询。如果我们不使用自动完成功能而只是将结果放入数组中,则会返回正确的结果。

有什么建议吗?

编辑:

这是返回结果的查询

SELECT Name from view_customers where Details LIKE '{0}'

使用 {0} 作为搜索字符串的占位符。

最佳答案

现有的自动完成功能仅支持按前缀搜索。似乎没有任何合适的方法来覆盖该行为。

有些人通过覆盖 OnTextChanged 事件实现了他们自己的自动完成功能。这可能是您最好的选择。

例如,您可以在 TextBox 下方添加一个 ListBox 并将其默认可见性设置为 false。然后你可以使用 TextBoxOnTextChanged 事件和 ListBoxSelectedIndexChanged 事件来显示和选择项目.

作为一个基本的例子,这似乎工作得很好:

public Form1()
{
InitializeComponent();


acsc = new AutoCompleteStringCollection();
textBox1.AutoCompleteCustomSource = acsc;
textBox1.AutoCompleteMode = AutoCompleteMode.None;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
}

private void button1_Click(object sender, EventArgs e)
{
acsc.Add("[001] some kind of item");
acsc.Add("[002] some other item");
acsc.Add("[003] an orange");
acsc.Add("[004] i like pickles");
}

void textBox1_TextChanged(object sender, System.EventArgs e)
{
listBox1.Items.Clear();
if (textBox1.Text.Length == 0)
{
hideResults();
return;
}

foreach (String s in textBox1.AutoCompleteCustomSource)
{
if (s.Contains(textBox1.Text))
{
Console.WriteLine("Found text in: " + s);
listBox1.Items.Add(s);
listBox1.Visible = true;
}
}
}

void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString();
hideResults();
}

void listBox1_LostFocus(object sender, System.EventArgs e)
{
hideResults();
}

void hideResults()
{
listBox1.Visible = false;
}

您可以轻松完成更多工作:将文本附加到文本框、捕获其他键盘命令等。

关于C# 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796195/

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