ScintillaNET自动完成列表问题
本文关键字:列表 问题 ScintillaNET | 更新日期: 2023-09-27 18:29:47
我正在通过WindowsFormsHost
使用WPF/C#
中的ScintillaNET
。然而,控件似乎存在自动完成问题。我正在使用List<string>
来保存要在自动完成下拉列表中显示的文本。变量lang
是我的List<string>
,editor
是我的ScintillaNET
编辑器:
lang.Add("fprintf");
lang.Add("fscanf");
lang.Add("printf");
lang.Add("scanf");
lang.Add("snprintf");
lang.Add("remove");
lang.Add("rename");
lang.Add("tmpfile");
lang.Add("tmpnam");
lang.Add("fclose");
lang.Add("fflush");
lang.Add("fopen");
lang.Add("freopen");
lang.Add("setbuf");
lang.Add("setvbuf");
editor.AutoComplete.List = lang;
例如,如果我键入了printf
,下拉列表将转到单词printf
。但是,如果我在列表中选择稍后添加的单词,如fopen
,则不会产生与printf
相同的效果。下拉列表的作用就好像单词不在那里一样。
但是,这个词已经正确地添加到下拉列表中(当我向下滚动列表时),我在那里看到了fopen
。
为什么当我键入自动完成框时它不会转到fopen
,但当我键入printf
时它会转到printf
,我该如何解决这个问题?
Scintilla喜欢按排序的列表。尝试进行
lang.Sort();
editor.AutoComplete.List = lang;
这应该对你有用。
底层的Scintilla编辑器具有自动排序功能,但据我所见,这并没有暴露在.NET版本中。
我想关于更好性能的首选解决方案是Torgrim Brochmann的答案,但你也可以让Scintilla为你做这类事情:
editor.AutoCOrder = Order.PerformSort;
你只需要设置一次,编辑器每次都会为你排序。