В текстовых полях, предназначенных для ввода имён файлов, в Windows, как правило, включено автодополнение, позволяющее быстро ввести имя файла с клавиатуры, не боясь ошибиться.
Для реализации аналогичной функциональности в .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:
Редакция от 15 октября 2009
Тэги: c#, screenshots, советы
Комментариев нет
| ← | Можно ли перейти с коммуникатора на смартфон? | Литературный вкус | → |