gpt4 book ai didi

c# - 文本框自动完成无法正常工作

转载 作者:行者123 更新时间:2023-11-30 15:40:14 26 4
gpt4 key购买 nike

我正在尝试使用数组形式的自定义数据源实现文本框自动完成功能,该数组显示有关单个字符输入的建议。但是当我运行程序时,自动完成仅在输入第二个字符后才开始。当我调试时,我看到数据存在于 AutoCompleteNameCollection 中,但在输入第二个字符之前它不会显示在建议中。

这段代码是我在 textchange 事件中写的。

arr = LoadName(empid_txt.Text.Trim());  //arr is string array                          
namesCollection.AddRange(arr);
this.empid_txt.AutoCompleteMode = AutoCompleteMode.Suggest;
this.empid_txt.AutoCompleteSource = AutoCompleteSource.CustomSource;
this.empid_txt.AutoCompleteCustomSource = namesCollection;

在 LoadEvent 中,我用空数组初始化了 AutoCompleteNameCollection。

namesCollection.AddRange(arr);// here arr is empty
empid_txt.AutoCompleteMode = AutoCompleteMode.Suggest;
empid_txt.AutoCompleteSource = AutoCompleteSource.CustomSource;
empid_txt.AutoCompleteCustomSource = namesCollection;

但是直到第二个字符输入才起作用。但是,如果我使用空字符串而不是数组来初始化 AutoCompleteNameCollection,例如:namesCollection.Add("");它确实适用于单个字符输入,但有时它会给出 AccessViolationException:尝试读取或写入 protected 内存。那么有什么办法可以解决这个问题吗?

最佳答案

我可以在事件处理程序中设置 AutoCompleteSource 时复制访问冲突,看起来自动完成例程可能在替换和销毁时访问 AutoCompleteSource。

为防止这种情况发生,您可以对代码加锁。

lock(this)
{
arr = LoadName(empid_txt.Text.Trim()); //arr is string array
namesCollection.AddRange(arr);
this.empid_txt.AutoCompleteMode = AutoCompleteMode.Suggest;
this.empid_txt.AutoCompleteSource = AutoCompleteSource.CustomSource;
this.empid_txt.AutoCompleteCustomSource = namesCollection;
}

这阻止了访问冲突。

关于c# - 文本框自动完成无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486923/

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