Переопределить или перегрузить Автозаполнение Добавить правило - PullRequest
7 голосов
/ 26 декабря 2011

У меня есть текстовое поле, которое отправляет некоторые команды на инструмент.Я добавил функцию автозаполнения в это текстовое поле, и теперь все становится проще.

Что я думаю, чтобы улучшить это, так это добавить возможность того, что когда пользователь вводит команду (просто текст), пока автозаполнение находит совпадениетакже показано описание этой команды.

На данный момент у меня есть все строки автозаполнения в текстовом файле, и я загружаю его при запуске приложения.Текстовый файл содержит такие строки:

*IDN?   #Query the instrument for identification
*RST    #Resets the instrument

Итак, что происходит в моем приложении, так это то, что поскольку автозаполнение находится в режиме SuggestAppend, описание команды также попадает в текстовое поле (это будет то же самое, еслиЯ только помещаю его в режим Suggest)

Что мне нужно знать, это как заставить автозаполнение добавлять текст, в то время как его

  1. не добавляет текст, начинающийся с # char при добавлении предложенного текста
  2. Обрезать () текст, чтобы избежать пробелов, которые вы видите в источнике текстового файла

UPDATE 1 Хорошо, я думаюединственный способ - создать новый класс и наследовать от AutoCompleteStringCollection. И в этом новом классе каким-то образом переопределить ответственный метод для возврата (добавления) предложенного текста.Я действительно понятия не имею, что мне делать:

class MyAutoCompleteCollection : AutoCompleteStringCollection 
{
    //How to override Get function of AutoCompleteStringCollection class?
    //It is not avilable to override :(
}

ОБНОВЛЕНИЕ 2 Я обнаружил, что методы в AutoCompleteStringCollection не могут быть переопределены.Я ищу способ изменить метод [] (если честно, я не знаю, как его назвать!).Кто-нибудь имеет какое-либо представление об этом?

enter image description here

ОБНОВЛЕНИЕ 3 Когда текст без #DESC входит в текстовое поле, у меня есть обработчик событий для KeyDown, которыйпередаст команду на инструмент.

Ответы [ 5 ]

1 голос
/ 31 декабря 2011

Вместо того, чтобы пытаться бороться с функциями автозаполнения, реализованными Microsoft, я настоятельно рекомендую вместо этого использовать многоколонный комбинированный список.

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

Для покупки доступно огромное количество элементов управления (Infragistics, Intersoft, Syncfusion и т. д.) иВы, вероятно, можете найти бесплатные или самостоятельно созданные версии на различных сайтах, таких как CodeProject.

Переход по этому маршруту должен сэкономить вам много времени.

1 голос
/ 28 декабря 2011

Использование метода SuggestAppend и загрузка текстового файла в качестве пользовательского источника для функции автозаполнения TextBox.

Вы можете использовать событие Leave TextBox, чтобы удалить весь текстпосле # и обрезать результат:

private void textBox1_Leave(object sender, EventArgs e)
{
    textBox1.Text = textBox1.Text.Remove(textBox1.Text.LastIndexOf("#")).Trim();
}

Таким образом, описание остается в списке автозаполнения, но как только вы выходите из текстового поля или покидаете его, остается только команда.

0 голосов
/ 03 января 2012

В качестве ответа на ваше обновление №. 2: [] На самом деле это свойство индекса.

Ваш класс реализует коллекцию. Вы можете получить элемент по индексу X, используя код:

var thirdItem = myAutoCompleteCollectionInstance[3];

Свойства индекса можно создавать вручную с помощью приведенного ниже кода, который можно использовать для настройки порядка, возвращая нужные элементы по указанным индексам.

 public string this[int index] {get ...} {set...} 
0 голосов
/ 28 декабря 2011

Вот ссылка с полным примером для автозаполнения

http://technet.microsoft.com/en-us/query/chff42zw
0 голосов
/ 28 декабря 2011

Свойство AutoComplete для Textbox имеет значение SuggestAppend, что означает, что оно добавляет как текст, так и описание. Поэтому вам нужно установить для свойства AutoComplete Textbox только значение «Suggest».

Согласно MSDN, свойство Autocomplete может принимать четыре перечислимых значения, а именно

Ниже приведены значения AutoCompleteMode:

Append : Appends the remainder of the most likely candidate string to the existing characters, highlighting the appended characters.

Suggest : Displays the auxiliary drop-down list associated with the edit control. This drop-down is populated with one or more suggested completion strings.

SuggestAppend : Appends both Suggest and Append options.

None : Disables automatic completion. This is the default.

Попробуйте использовать эти значения вместо создания подкласса AutoCompleteStringCollection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...