我对 C# 中文本框的自动完成功能有两个疑问。
首先,我想显示完整列表,而不仅仅是以给定文本开头的列表,其次我想防止特定选项的自动完成(有些是类别标题)。
我一直在检查文本框属性并且没有任何相关内容,所以主要问题可能是,有没有办法修改/覆盖文本框事件以处理自动完成操作?(我不知道它是否也适用于显示完整列表)
我对 C# 中文本框的自动完成功能有两个疑问。
首先,我想显示完整列表,而不仅仅是以给定文本开头的列表,其次我想防止特定选项的自动完成(有些是类别标题)。
我一直在检查文本框属性并且没有任何相关内容,所以主要问题可能是,有没有办法修改/覆盖文本框事件以处理自动完成操作?(我不知道它是否也适用于显示完整列表)
我假设您询问的是 winforms 文本框,因为我认为 WPF 文本框根本不支持自动完成。
基TextBox
类不支持做你想做的事,所以理论上你可以尝试重写TextBox
类中的所有功能来做你想做的事,但更好的主意是创建一个新的自定义控件,它继承自TextBoxBase
并实现以您想要的方式自动完成行为。
我不确定是否要显示完整列表(也许组合框或类似的东西更适合这个?)但你绝对可以做这样的事情来交换可以显示的可能项目列表。
另一种选择,虽然我不太喜欢,是从集合中动态删除您不想在给定时间显示的项目,如下所示:textBox.AutoCompleteCustomSource.Remove("ACategoryTitle")
我可以预见这种方法在尝试不断重建列表时会遇到很多问题。我可能会创建一个AutoCompleteStringCollection
包含一些 LINQ 代码的子类,以很好地选择某些列表的并集,而不是其他列表的并集以显示在文本框中。
我决定在一个简单的列表框和事件的帮助下构建我自己的自动完成工具,然后我可以实现我所期望的......
如果您想要更体面的东西,CodingGorilla 的答案可能会带来更好的解决方案,就我而言,出于速度原因,我决定这样做,但我会将他的答案标记为已接受,以帮助其他有同样疑问的人他们可以考虑这一点..