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

时间:2011-12-26 12:11:20

标签: c# winforms autocomplete textbox

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

我正在考虑改进这一点,是为了增加一种可能性,当用户输入命令(只是文本)而AutoComplete找到匹配时,它还会显示该命令的描述。

目前,我在文本文件中包含了所有AutoComplete字符串,并在应用程序启动时加载它。文本文件包含如下行:

*IDN?   #Query the instrument for identification
*RST    #Resets the instrument

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

我需要知道的是如何强制AutoComplete在其

时附加文本
  1. 在追加建议的文字时,不会添加从#字符开头的任何文字
  2. 修剪()文本以避免在文本文件源中看到的空格
  3. 更新1 好吧,我认为唯一的方法是创建一个新类并继承自AutoCompleteStringCollection并且在这个新类中,以某种方式覆盖用于返回(追加)建议文本的可重用方法。我真的不知道该怎么做:

    class MyAutoCompleteCollection : AutoCompleteStringCollection 
    {
        //How to override Get function of AutoCompleteStringCollection class?
        //It is not avilable to override :(
    }
    

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

    enter image description here

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

5 个答案:

答案 0 :(得分:1)

继续使用SuggestAppend方法并将文本文件作为TextBox的自动完成功能的自定义源加载。

您可以使用TextBox的Leave事件删除#之后的所有文本并修剪结果:

private void textBox1_Leave(object sender, EventArgs e)
{
    textBox1.Text = textBox1.Text.Remove(textBox1.Text.LastIndexOf("#")).Trim();
}

这样,描述会保留在自动完成列表中,但只要您选中或退出文本框,只会保留命令。

答案 1 :(得分:1)

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

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

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

走这条路可以节省很多时间。

答案 2 :(得分:0)

以下链接包含自动填充的完整示例

http://technet.microsoft.com/en-us/query/chff42zw

答案 3 :(得分:0)

作为您的更新的答案nr。 2: []实际上是一个索引属性。

您的类实现了一个集合。您可以使用以下代码获取索引X处的项目:

var thirdItem = myAutoCompleteCollectionInstance[3];

可以使用下面的代码手动创建索引属性,您可以通过在指定的索引处返回所需的项目来自定义订单。

 public string this[int index] {get ...} {set...} 

答案 4 :(得分:-1)

Textbox的AutoComplete属性设置为SuggestAppend,这意味着它会添加文本和描述。因此,您需要将Textbox的AutoComplete属性设置为“Suggest”值。

根据MSDN,自动完成属性可以采用四个枚举值,即

以下是AutoCompleteMode的值:

Append : Appends the remainder of the most likely candidate string to the existing characters, highlighting the appended characters.

Suggest : Displays the auxiliary drop-down list associated with the edit control. This drop-down is populated with one or more suggested completion strings.

SuggestAppend : Appends both Suggest and Append options.

None : Disables automatic completion. This is the default.

尝试使用这些值,而不是继承AutoCompleteStringCollection。