C#如何将文本框建议列表放入列表<;字符串>;?
C#如何将文本框建议列表放入列表中 e、 说我喜欢C#如何将文本框建议列表放入列表<;字符串>;?,c#,autosuggest,C#,Autosuggest,C#如何将文本框建议列表放入列表中 e、 说我喜欢 textBox1.AutoCompleteSource=AutoCompleteSource.FileSystemDirectories 或 textBox1.AutoCompleteSource=AutoCompleteSource.RecentlyUsedList 及 textBox1.AutoCompleteMode=AutoCompleteMode.SuggestAppend 我在文本框的弹出建议窗口中得到建议,但我可以在列表中检索这些
textBox1.AutoCompleteSource=AutoCompleteSource.FileSystemDirectories
或
textBox1.AutoCompleteSource=AutoCompleteSource.RecentlyUsedList
及
textBox1.AutoCompleteMode=AutoCompleteMode.SuggestAppend代码>
我在文本框的弹出建议窗口中得到建议,但我可以在列表中检索这些建议吗?您将希望以以下方式设置文本框
:
AutoCompleteStringCollection source = new AutoCompleteStringCollection();
// Add each item to the collection
source.Add("some string");
TextBox textBox = new TextBox();
textBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox.AutoCompleteCustomSource = source;
然后,您可以通过执行以下操作在任何其他位置访问这些项目:
foreach(string item in textBox.AutoCompleteCustomSource)
{
Console.WriteLine(item);
}
或者,不管您想怎样,textBox.AutoCompleteSource现在定义为一个实现IList
、ICollection
和IEnumerable
的类。因此,您可以使用访问列表
、集合
或枚举
的任何方法。这取决于你
要总结下面的评论,要访问auto complete中除自定义源代码之外的任何内容的项目列表,您可能需要连接到Windows API,或者使用反射(虽然这不太可能,但Windows API最有可能工作)。根据我的研究,我确实认为,如果将AutoCompleteSource
设置为定义的值之一,就无法直接获得TextBox
控件的建议列表
该问题答案的作者:建议阅读CP的文章:能够使用AutoComplete
展开编辑框中编写的字符串。要获得此结果:
您可以采用两种方法,第一种是“按环境属性”选项卡,第二种是“按环境属性”
设置以下属性:
最好的方法是通过代码创建此效果,请参见下面的示例:
AutoCompleteStringCollection sourceName = new AutoCompleteStringCollection();
foreach (string name in listNames)
{
sourceName.Add(name);
}
txtName.AutoCompleteCustomSource = sourceName;
txtName.AutoCompleteMode = AutoCompleteMode.Suggest;
txtName.AutoCompleteSource = AutoCompleteSource.CustomSource;
请查看MSDN文档:AutoCompleteSource是字符串的集合;)@MaciejLos这是一个枚举。我不知道如何获取IEnumerable或Array中的字符串。你是说文件系统目录
和最近使用的列表
?那么,是否要获取这些值?可以使用for循环遍历枚举。@gmiley遍历RecentlyUsedList枚举是否会生成一组字符串,每个字符串都是一个路径?如果是这样的话,那么我愿意。如果不是,那么不,我不想。我可以让它工作`foreach(textBox.AutoCompleteCustomSource中的字符串项)tb.Text+=item;`但我无法让它在`foreach(textBox.AutoCompleteSource中的字符串项)tb.Text+=item;`e、 g.如果AutoCompleteSource可能不是自定义的。AutoCompleteSource
只是定义TextBox
将使用哪种源的属性,它不包含在用户键入时向其显示的任何自动完成项AutoCompleteCustomSource
是包含项目列表的内容。看看MSDN条目,它提供了一个值列表,可以分配给AutoCompleteSource
:因此,您的列表只适用于自定义列表,我可以使用自定义列表,甚至不需要从文本框中获取它。但是,当建议不是定制的时候,它不会得到建议。。e、 g.当建议是,例如,AutoCompleteSource.RecentlyUsedList
时,我认为在使用RecentlyUsed
选项时,无法访问列表。您可能可以使用反射查看某些内容,但我建议您使用CustomSource
选项并自己存储/填充列表。当列表是自定义列表时,从textbox建议窗口获取它没有任何好处,因为自定义列表是我构建的,所以我会拥有该列表。我的问题是给出最近使用的(你认为不可能)和目录AutoCompleteSource.FileSystemDirectories
c第1部分的一位评论员的例子#tatworth提到的shell评论你认为该代码项目中的代码有危险吗?@barlop,不客气。使用本文作者Think提供的代码没有危险。今天,一个.net框架有许多安全更新未被屏蔽。你能解释一下链接所说的危险是什么,以及为什么它不适用于该代码项目作者的代码吗?该项目第1部分中的一堆链接也被破坏了。e、 g.他说,先决条件是阅读Shell程序员指南
和Shell基础知识
和Shell名称空间
以及其他一系列的msdn链接,它们都是断开的链接。从这里开始阅读《Shell开发者指南》
:当你键入相关MSDN文章的标题时,其他链接可以通过谷歌获得。我已经有一段时间没有研究过这一点了,但你在这里发布的部分内容与gsmiley的建议非常相似,而且看起来我对此有异议,你解决了这些问题吗?@barlop我指定了两种方法。通过IDE和代码。答案是不同的,对我来说是更澄清的。如果你按照建议阅读关于另一个答案的评论,那么你会看到我写的“所以你的一个只适用于自定义列表,我可以拥有它,甚至不需要从文本框中获取它。但是,当建议不是定制的时候,它不会得到建议。。e、 g.当建议有效时,例如AutoCompleteSource.RecentlyUsedList“我看了看你的代码,上面写着txtName.AutoCompleteSource=AutoCompleteSource.CustomSource
在您的GUI示例中表示了一个等价的东西,引用的是自定义源代码而不是最近使用的列表。因此,您的答案并没有解决我在另一个答案中提到的问题,只是与它共享了这个问题。