ScintillaNET 自动完成列表问题
Posted
技术标签:
【中文标题】ScintillaNET 自动完成列表问题【英文标题】:ScintillaNET Auto-Completion List Issue 【发布时间】:2013-09-02 00:34:52 【问题描述】:我通过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
,我该如何解决这个问题?
【问题讨论】:
【参考方案1】:Scintilla 喜欢按排序顺序排列的列表。尝试做一个
lang.Sort();
editor.AutoComplete.List = lang;
这应该对你有用。
底层的 Scintilla 编辑器具有自动排序功能,但据我所知,这并未暴露于 .NET 版本。
【讨论】:
【参考方案2】:我猜想获得更好性能的首选解决方案是Torgrim Brochmann'a answer,但您也可以让 Scintilla 为您进行排序:
editor.AutoCOrder = Order.PerformSort;
您只需设置一次,编辑器每次都会为您排序。
【讨论】:
以上是关于ScintillaNET 自动完成列表问题的主要内容,如果未能解决你的问题,请参考以下文章