Проблема со списком автозаполнения ScintillaNET

Я использую ScintillaNET в WPF/C# через WindowsFormsHost. Однако похоже, что у элемента управления возникла проблема с автозаполнением. Я использую 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, и как я могу решить эту проблему?


person inixsoftware    schedule 02.09.2013    source источник


Ответы (2)


Сцинтилле нравится список в отсортированном порядке. Попробуйте сделать

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

Это должно помочь вам.

Базовый редактор Scintilla имеет функцию автосортировки, но, насколько я могу судить, она не доступна в версии .NET.

person Torgrim Brochmann    schedule 19.09.2013

Я предполагаю, что предпочтительным решением для повышения производительности является ответ Torgrim Brochmann'a, но вы также можете заставить Scintilla выполнить сортировку за вас :

editor.AutoCOrder = Order.PerformSort;

Вам нужно установить это только один раз, и редактор будет каждый раз сортировать список за вас.

person Philipp M    schedule 27.11.2015