>

Автодополнение в текстовых полях (.NET)

29 мая 2008 // Хельги

В текстовых полях, предназначенных для ввода имён файлов, в Windows, как правило, включено автодополнение, позволяющее быстро ввести имя файла с клавиатуры, не боясь ошибиться.

/users/helgi/autocomplete.png

Для реализации аналогичной функциональности в .NET-приложении можно воспользоваться функцией SHAutoComplete.

Для использования функции потребуется объявить её, как описано на pinvoke.net:

[Flags]
public enum AutoCompleteFlags : uint
{
    SHACF_DEFAULT = 0x00000000,
    SHACF_FILESYSTEM = 0x00000001,
    SHACF_URLALL = (SHACF_URLHISTORY | SHACF_URLMRU),
    SHACF_URLHISTORY = 0x00000002,
    SHACF_URLMRU = 0x00000004,
    SHACF_USETAB = 0x00000008,
    SHACF_FILESYS_ONLY = 0x00000010,
    SHACF_FILESYS_DIRS = 0x00000020,
    SHACF_AUTOSUGGEST_FORCE_ON = 0x10000000,
    SHACF_AUTOSUGGEST_FORCE_OFF = 0x20000000,
    SHACF_AUTOAPPEND_FORCE_ON = 0x40000000,
    SHACF_AUTOAPPEND_FORCE_OFF = 0x80000000, 
}

[DllImport("shlwapi.dll", ExactSpelling = true, PreserveSig = false)]
public static extern Int32 SHAutoComplete(
    IntPtr hwndEdit,
    AutoCompleteFlags dwFlags
);

Для активации автодополнения в обычном текстовом поле достаточно такого вызова:

SHAutoComplete(textBox1.Handle, AutoCompleteFlags.SHACF_FILESYSTEM);

Если же необходимо включить автодополнение в элементах управления ButtonEdit или TextEdit из библиотеки DevExpress, то код будет немного сложнее:

foreach (Control control in buttonEdit1.Controls)
{
    if (control is TextBox)
    {
        SHAutoComplete(control.Handle, AutoCompleteFlags.SHACF_FILESYSTEM);
    }
}

Дело в том, что элементы DevExpress не являются текстовыми полями, а включают их в качестве дочерних элементов.

Вот так выглядит автодополнение в элементе ButtonEdit:

/users/helgi/autocomplete2.png

Редакция от 15 октября 2009
Тэги: c#, screenshots, советы
Комментариев нет

Можно ли перейти с коммуникатора на смартфон?Литературный вкус

Написать комментарий

На этот адрес будут приходить только уведомления о новых комментариях к этой записи.
Чтобы отправить комментарий, введите сюда слово «человек».
« »  
Высота поля:
Разрывы строк (Enter) будут сохранены. HTML не работает. Гиперссылки: вставьте URL.

Ваш комментарий появится после одобрения модератором.