覆盖或超载自动完成追加规则

Sae*_*ani 7 c# textbox autocomplete winforms

我有一个文本框,可以向仪器发送一些命令.我在此文本框中添加了自动完成功能,现在情况变得更加容易了.

我想要改进这一点,是为了增加一种可能性,当用户输入命令(只是一个文本)而AutoComplete找到匹配时,它也会显示该命令的描述.

目前,我在文本文件中包含所有AutoComplete字符串,并在应用程序启动时加载它.文本文件包含这样的行:

*IDN?   #Query the instrument for identification
*RST    #Resets the instrument
Run Code Online (Sandbox Code Playgroud)

所以在我的应用程序中发生的是因为AutoComplete处于SuggestAppend模式状态,命令的描述也会进入文本框(如果我只将它放在Suggest模式中,这将是相同的)

我需要知道的是如何强制AutoComplete追加文本

  1. #在附加建议的文本时,不添加从char 开始的任何文本
  2. 修剪()文本以避免在文本文件源中看到的空格

更新1 好吧,我认为唯一的方法是创建一个新类并继承自AutoCompleteStringCollectionAnd在这个新类中,以某种方式覆盖用于返回(追加)建议文本的reponsible方法.我真的不知道该怎么办:

class MyAutoCompleteCollection : AutoCompleteStringCollection 
{
    //How to override Get function of AutoCompleteStringCollection class?
    //It is not avilable to override :(
}
Run Code Online (Sandbox Code Playgroud)

更新2 我发现方法AutoCompleteStringCollection不可覆盖.我正在寻找一种方法来改变方法的[]方式(说实话我不知道该怎么称呼它!)有效.有人对此有任何想法吗?

在此输入图像描述

更新3 当没有#DESC的文本进入文本框时,我有一个KeyDown的事件处理程序,它将命令传送到仪器.

com*_*ech 1

我强烈建议您使用多列组合框,而不是尝试与 Microsoft 实现的自动完成功能作斗争。

我们使用的所有命令都支持自动完成,因此您可以将命令存储在第一列中并将其作为您的值,然后将描述存储在第二列中。

有大量可供购买的控件(Infragistics、Intersoft、Syncfusion 等),您可能可以在 CodeProject 等各种网站上找到免费或自建版本。

走这条路线应该会节省你很多时间。