可以将数据结构对象附加到文本框以实现自动完成吗?

本文关键字:实现 文本 数据结构 对象 | 更新日期: 2023-09-27 17:49:25

我有一个文本框,我想使用自动完成。例如,如果use键入起始字符,则会显示一个带有选项的下拉菜单。这就是我目前使用以下代码所做的:

inputTextBox.AutoCompleteMode = AutoCompleteMode.Suggest;
inputTextBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
inputTextBox.AutoCompleteCustomSource = inputStringCollection; //inputStringCollection contains the list of possible strings

我需要什么:

我希望能够搜索多种类型的数据使用这个文本框(如全名,用户名,电子邮件,电话号码等)。例如,客户具有诸如他的全名、他在系统中的用户名、他的电话号码列表、电子邮件列表等属性。现在,我有单独的文本框,但我想把它们合并成一个。所以我的想法是,我应该能够在同一个文本框中搜索所有类型的属性。

问题:

我想到的一个可能的实现是为每种类型的属性制作单独的字符串集合,然后将它们合并为一个,然后将合并的字符串集合附加到此文本框。这种方法的问题是我不能处理重复。假设有一个人,他的名字和用户名都是"John"。在这种情况下,我将不知道从下拉菜单中选择了什么类型的属性。

问题:

是否有可能附加的东西,而不是一个单纯的字符串集合到文本框的自动完成机制?也许我可以有一个数组列表存储自定义数据结构对象,每个对象定义几个值,如ID,属性类型等。或者类似的东西?这样,当用户从下拉菜单中选择一个条目时,我就可以知道用户选择的是什么类型的属性。

可以将数据结构对象附加到文本框以实现自动完成吗?

通常情况下,在软件中,只有一个搜索框可以回答任何类型的搜索,这是Mac版iTunes Store的第一个版本引入的。

作为开发人员,我们最终要做的是在选择数据库之前使用SQL或动态语言中的case变量。

  • 如果在搜索中找到@字符,让我们通过电子邮件地址查找
  • 如果找到一个电话号码(例如regex匹配),让我们搜索电话号码
  • 如果发现integer,让我们通过订单id
  • 查找
  • else,让我们按客户名称,地址或城市查找

这就是我们通常如何使一个搜索框成为"搜索一切",这并不是真正的一切,但这是我们知道在哪里搜索的搜索格式。

有一个"高级搜索"总是一个很好的做法,我们有一堆字段,可以真正使动态查询功能强大,因为只有在特殊情况下,用户才会使用它。

您可以创建自己的"String collection"对象,它在外部看起来像一个普通列表,但在内部保留所有实际列表,然后在调用接口方法时搜索所有列表。您需要了解自动完成功能是如何获得建议的。