WinForms:为文本编辑器提供动态建议弹出窗口

本文关键字:动态 窗口 文本 文本编辑 编辑器 WinForms | 更新日期: 2023-09-27 17:59:55

我想为我们的应用程序实现类似Google的搜索栏行为:用户必须能够以自由文本的形式输入用户名,并且基于输入的数据,系统必须基于现有用户名在弹出栏上提供几条建议。


以下是简单的算法:

  • 用户在文本编辑框中输入一些字符
  • 系统通过内部的web服务调用触发一些更改事件,以更新建议列表数据
  • 文本编辑还必须提供输入并保留自由文本以创建新用户的能力,而不仅仅是查找现有用户

我不能使用devexpress的lookupedits——它们只允许保留数据源中显示的值——即使在ProcessNewValue内部通过添加到数据源来处理新值

通过刷新我的数据源覆盖新的唯一值,更改事件再次触发。现在我期待着组合框控件。但看起来没有能力在显示弹出建议的同时输入自由文本。

WinForms:为文本编辑器提供动态建议弹出窗口

我不能使用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属性来控制查找是否接受输入的文本作为有效值,即使它不属于基础数据源。