WinForms:为文本编辑器提供动态建议弹出窗口
本文关键字:动态 窗口 文本 文本编辑 编辑器 WinForms | 更新日期: 2023-09-27 17:59:55
我想为我们的应用程序实现类似Google的搜索栏行为:用户必须能够以自由文本的形式输入用户名,并且基于输入的数据,系统必须基于现有用户名在弹出栏上提供几条建议。
以下是简单的算法:
- 用户在文本编辑框中输入一些字符
- 系统通过内部的web服务调用触发一些更改事件,以更新建议列表数据
- 文本编辑还必须提供输入并保留自由文本以创建新用户的能力,而不仅仅是查找现有用户
我不能使用devexpress
的lookupedits——它们只允许保留数据源中显示的值——即使在ProcessNewValue
内部通过添加到数据源来处理新值
通过刷新我的数据源覆盖新的唯一值,更改事件再次触发。现在我期待着组合框控件。但看起来没有能力在显示弹出建议的同时输入自由文本。
我不能使用devexpress的查找编辑-它们只允许保留数据源中显示的值-即使在ProcessNewValue中通过添加到数据源来处理新值
我相信你在这里错了,因为你可以使用简单的DevExpress LookUpEdit:
class AutoCompleteLookUpEdit : LookUpEdit {
List<string> suggestions = new List<string>();
public AutoCompleteLookUpEdit() {
Properties.DataSource = suggestions;
Properties.ImmediatePopup = true;
}
protected override void ProcessFindItem(KeyPressHelper helper, char pressedKey) {
suggestions.Clear();
// add search suggestions here depending on helper.Text value
suggestions.Add("google");
suggestions.Add("devexpress");
// ...
base.ProcessFindItem(helper, pressedKey);
}
}
查看如何创建具有动态自动完成列表的编辑器以获取详细示例。
附言:您可以使用AcceptEditorTextAsNewValue属性来控制查找是否接受输入的文本作为有效值,即使它不属于基础数据源。