如何让 C# 文本框自动完成以基于包含而不是开头提出建议

本文关键字:于包含 开头 文本 | 更新日期: 2023-09-27 18:30:37

我的 C# Windows 窗体应用程序中有一个文本框,其中的自动完成模式设置为 AutoCompleteMode.Suggest,并且我的内容源是自定义源。

我的内容源是自定义的,具有以下值:

  • 吉姆·史密斯
  • 爱丽丝·沃克
  • 鲍勃·沃克
  • 杰里米·史密斯

内容完成似乎仅通过检查建议的项目是否"以"文本框中的值"开头"来工作。

例如:

text=J

将产生以下建议:

  • 吉姆·史密斯
  • 杰里米·史密斯

但是,如果用户键入

text=Walk

没有结果。

如何获得内容完成以提出以下建议?

  • 爱丽丝·沃克
  • 鲍勃·沃克

此外,我的最终目标是拥有一个文本框,个人可以在其中轻松开始输入电子邮件地址。 自动完成建议的内容将是姓名 + 电子邮件地址。例如:

- Jim Smith <jsmith@mycorp.com>
- Alice Walker <alice@some.email.com>
- Bob Walker <bob.walker@mycorp.com>
- Jeremy Smith <jeremys@foo.com>

如何让 C# 文本框自动完成以基于包含而不是开头提出建议

使用内置文本框无法做到这一点。

阅读参考源显示,自动完成功能调用本机函数 SHAutoComplete 来完成它的工作。那个只做前缀匹配。

您必须对 TextBox 进行子类化并提供您自己的建议功能(或购买一个/找到一个开源功能),才能做到这一点。