ScintillaNET 自动完成列表问题

Posted

技术标签:

【中文标题】ScintillaNET 自动完成列表问题【英文标题】:ScintillaNET Auto-Completion List Issue 【发布时间】:2013-09-02 00:34:52 【问题描述】:

我通过WindowsFormsHostWPF/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 自动完成列表问题的主要内容,如果未能解决你的问题,请参考以下文章

ScintillaNET 自动完成

用于 ScintillaNET 的字节数组到文本

未触发 ScintillaNet Calltip 事件

RGBA 图像格式(由 Scintilla 使用)

VB.NET 中的 ScintillaNET 问题

从 ScintillaNet 打印内容时打印行号