В этом примере для сравнения использовались две кнопки. На каждой из них размещен достаточно длинный текст (рис. 4.2).
Рис. 4.2.
Вид кнопок в процессе программирования
При загрузке формы выполняется изменение стиля для первой кнопки
butMultiline
, а вторая кнопка остается без изменений. После запуска приложения можно заметить, что длинный текст в первой кнопке разбивается на две строки и полностью умещается в границах кнопки. Во второй кнопке слова обрезаются, и текст просто нельзя прочитать (рис. 4.3).
Рис. 4.3. Создание многострочного текста на кнопке
ВНИМАНИЕ
Данный пример был написан еще для .NET Compact Framework 1.0. В .NET Compact Framework 2.0 нет надобности вызывать функцию GetCapture для получения дескриптора hWnd, так как теперь поддерживается свойство Control.Handle.
Увеличение ширины выпадающего списка ComboBox
Выпадающий список у комбинированного окна равен ширине самого комбинированного окна
ComboBox
. Но можно обойти это ограничение с помощью неуправляемого кода, как показано в листинге 4.4.
Листинг 4.4
/// <summary>
/// Сообщение, получающее размеры выпадающего списка
/// комбинированного окна
/// </summary>
const int CB_GETDROPPEDWIDTH = 0x015f;
/// <summary>
/// Сообщение, устанавливающее размеры выпадающего списка
/// комбинированного окна
/// </summary>
const int CB_SETDROPPEDWIDTH = 0x0160;
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
int retval = SendMessage(comboBox2.Handle, CB_GETDROPPEDWIDTH, 0, 0);
this.Text = retval.ToString;
}
На
форме надо разместить два элемента
ComboBox
. Один из них будет стандартным. А второй элемент обработает сообщение
CB_SETDROPPEDWIDTH
со значением второго параметра 200. В результате выпадающий список будет в ширину занимать 200 пикселов.
После запуска программы сначала надо обратить внимание на работу первого комбинированного окна (рис. 4.4). Оно ведет себя стандартным образом.
Рис. 4.4. Стандартный размер выпадающего списка
Теперь нужно перейти ко второму комбинированному окну. У него размер выпадающего списка увеличился, что позволяет увидеть весь текст (рис. 4.5).
Рис. 4.5. Увеличенный размер выпадающего списка у ComboBox
ListBox
Элемент
ListBox
имеет множество возможностей, которые пока не реализованы в рамках платформы .NET Compact Framework. В частности, данный элемент не позволяет осуществлять поиск элементов по первым символам. Но для решения этой задачи можно использовать сообщение
LB_FINDSTRING
.
Чтобы создать тестовое приложение, нужно добавить на форму список
ListBox
и текстовое поле
TextBox
. Также потребуется ввести код, приведенный в листинге 4.5.
Листинг 4.5
const int LB_FINDSTRING = 0x018F;
const int LB_FINDSTRINGEXACT = 0x01A2;
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hwnd, int msg,
После запуска проекта можно попробовать ввести в текстовом поле любое слово. Если в списке есть слова, начинающиеся с введенных символов, то они начнут выделяться в списке. Например, можно сначала ввести символ
b
, затем
a
и, наконец,
l
. Сначала будет выделено слово
bank
, а после третьего введенного символа выделение перейдет на слово