如何获得事件“;所选项目”;带有C#中的自动完成功能

本文关键字:成功 功能 事件 何获得 选项 项目 带有 | 更新日期: 2023-09-27 18:28:32

我有使用AutoCompleteStringCollection:的代码

    private void txtS_TextChanged(object sender, EventArgs e)
    {
        TextBox t = sender as TextBox;
        string[] arr = this.dbService.GetAll();
        if (t != null)
        {
            if (t.Text.Length >= 3)
            {
                AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
                collection.AddRange(arr);                    
                this.txtSerial.AutoCompleteCustomSource = collection;
            }
        }
    }

在用户选择自动完成建议后,如何获取"已选择项目"的事件?字段的值是多少?

如何获得事件“;所选项目”;带有C#中的自动完成功能

对于textBox来说,没有所选项目Event这样的东西,我相信您正在使用它进行自动完成。你可以做的是在你的文本框中添加一个按键按下事件。在那里,您可以验证是否按下了回车键(点击建议的链接与按下回车键相同)。类似的东西:

private void textBox1_KeyDown(object sender, KeyEventArgs e) {
    if (e.KeyData == Keys.Enter) {
        String selItem = this.textBox1.Text;
    }
}

与其专注于检测是否选择了自动完成列表中的项目,不如检查文本框的当前值是否在自动完成条目集中

if (txtSerial.AutoCompleteCustomSource.Contains(t.Text))
{
    // Logic to handle an exact match being selected
    ...
}
else
{
    // Update the autocomplete entries based on what was typed in
}

如果用户键入了一个恰好在自动完成值列表中的字符串——或者——他们从自动完成列表中选择了该值——这是否会产生任何不同的行为?我认为在大多数情况下不应该这样做。

简短回答:制作一个自定义事件

长话短说:您可以截取numpad Enter或普通Enter的文本框的KeyDown事件和工具箱的鼠标双击事件,并比较工具箱的内容,然后在它们匹配时激发一个事件,代理将拾取该事件。

这在一定程度上取决于程序的情况和工作流程,但我有一个例子,我触发了对组合框的focuslost的检查。然后我检查所选的值是否是集合的一部分:


private void cmbt1Name1_LostFocus(object sender, RoutedEventArgs e)
{
        ComboBox cmb = sender as ComboBox;
        FillFivePoints(cmb);
}
private void FillFivePoints(ComboBox usedCombobox)
{
    if (txtSerial.AutoCompleteCustomSource.Contains(t.Text))
    {
    ...