C#自动完成

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

[001]最后,第一中

当前,您必须键入[001] …才能显示条目。 。所以如果一个条目是

[001]史密斯,约翰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());

}

}

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

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

有什么建议吗?

这是返回结果的查询

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

其中{0}是所搜索字符串的占位符。

回答:

现有的自动完成功能仅支持按前缀搜索。似乎没有任何体面的方法可以覆盖此行为。

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

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

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

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#自动完成 的全部内容, 来源链接: utcz.com/qa/414210.html

回到顶部