我有一个文本框,可以向仪器发送一些命令。我在此文本框中添加了自动完成功能,现在情况变得更加容易了。
我正在考虑改进这一点,是为了增加一种可能性,当用户输入命令(只是文本)而AutoComplete找到匹配时,它还会显示该命令的描述。
目前,我在文本文件中包含了所有AutoComplete字符串,并在应用程序启动时加载它。文本文件包含如下行:
*IDN? #Query the instrument for identification
*RST #Resets the instrument
所以在我的应用程序中发生的事情是因为AutoComplete处于SuggestAppend
模式,命令的描述也会进入文本框(如果我只将它放在Suggest
模式下,这将是相同的)
我需要知道的是如何强制AutoComplete在其
时附加文本#
字符开头的任何文字 更新1
好吧,我认为唯一的方法是创建一个新类并继承自AutoCompleteStringCollection
并且在这个新类中,以某种方式覆盖用于返回(追加)建议文本的可重用方法。我真的不知道该怎么做:
class MyAutoCompleteCollection : AutoCompleteStringCollection
{
//How to override Get function of AutoCompleteStringCollection class?
//It is not avilable to override :(
}
更新2
我发现AutoCompleteStringCollection
中的方法不可覆盖。我正在寻找一种方法来改变[]
方法(说实话我不知道该怎么称呼它!)的方式。有人对此有任何想法吗?
更新3 当没有#DESC的文本进入文本框时,我有一个KeyDown的事件处理程序,它将命令传送到仪器。
答案 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。