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,我该如何解决这个问题?

ScintillaNET自动完成列表问题

Scintilla喜欢按排序的列表。尝试进行

lang.Sort();
editor.AutoComplete.List = lang;

这应该对你有用。

底层的Scintilla编辑器具有自动排序功能,但据我所见,这并没有暴露在.NET版本中。

我想关于更好性能的首选解决方案是Torgrim Brochmann的答案,但你也可以让Scintilla为你做这类事情:

editor.AutoCOrder = Order.PerformSort;

你只需要设置一次,编辑器每次都会为你排序。