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

До выхода в свет Net Framework 2.0 автозавершение слов в textbox’ах приходилось реализовывать самостоятельно, теперь же это встроенная возможность. За автозавершение слов отвечают свойства AutoCompleteSource, AutoCompleteMode и AutoCompleteCustomSource редактора textbox.

Первое задает источник строк, которые будут предложены пользователю. Возможные значения задаются одноименным перечислением. Наиболее интересным является AutoCompleteSource.CustomSource, поскольку позволяет использовать собственный список слов, который должен быть задан в свойстве AutoCompleteCustomSource.

Свойство AutoCompleteMode задает режим автозавершения слов, возможные значения: Append, None, Suggest и SuggestAppend.

Append – добавляет остаток строки (как это сделано в Excel)

None – автозавершение слов не производится.

Suggest — варианты автозавершения слов предлагаются в ниспадающем списке.

SuggestAppend – комбинация первого и третьего способов.

Использование автозавершения слов продемонстрирую на примере:

private void Form1_Load(object sender, EventArgs e)
{
    AutoCompleteStringCollection strings = new AutoCompleteStringCollection();
    // подготовим коллекцию для автозавершения слов
    strings.AddRange(new String[]
    {
        "красный",
        "оранжевый",
        "желтый",
        "зеленый",
        "голубой",
        "синий",
        "фиолетовый"
    });
    textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
    textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
    textBox1.AutoCompleteCustomSource = strings;

    // добавляем автозавершение слов в DataGridView
    dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
}

Результат работы представлен на рис. 1.

Рис. 1. Автозавершение слов

Рис. 1. Автозавершение слов

Автозавершение слов в DataGridView

Функция автозавершения слов в textbox’е штука конечно полезная, но, как говорится, не textbox’ом единым.

Для добавления сей полезной возможности в DataGridView, необходимо подписаться на событие EditingControlShowing:

void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is DataGridViewTextBoxEditingControl)
    {
        DataGridViewTextBoxEditingControl te = (DataGridViewTextBoxEditingControl)e.Control;
        te.AutoCompleteMode = AutoCompleteMode.Suggest;
        te.AutoCompleteSource = AutoCompleteSource.CustomSource;
        te.AutoCompleteCustomSource.AddRange(new String[]
                                            {
                                                "красный",
                                                "оранжевый",
                                                "желтый",
                                                "зеленый",
                                                "голубой",
                                                "синий",
                                                "фиолетовый"
                                            });
    }
}

Результат представлен на рис. 2.

Рис. 2. Автозавершение слов в DataGridView

Рис. 2. Автозавершение слов в DataGridView

Демонстрационный пример можно скачать по ссылке: sample03.rar.