В текстовых полях, предназначенных для ввода имён файлов, в 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, советы
Комментариев нет
← | Можно ли перейти с коммуникатора на смартфон? | Литературный вкус | → |