Теперь нужно перейти ко второму комбинированному окну. У него размер выпадающего списка увеличился, что позволяет увидеть весь текст (рис. 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
, а после третьего введенного символа выделение перейдет на слово
ball
.
Существует также сообщение
LB_FINDSTRINGEXACT
, которое осуществляет поиск по целому слову без учета регистра. Имеет смысл применять его, когда список содержит сотни записей и отыскивание нужного слова становится утомительным занятием. Чтобы показать применение этого сообщения, нужно добавить в предыдущий пример дополнительную кнопку и ввести код, приведенный в листинге 4.6.
Возможно, вы замечали, что в некоторых программах используется элемент
ListView
с градиентной заливкой. Например, такое оформление интерфейса можно увидеть в списке контактов. Оказывается, совсем не сложно применить такую раскраску в своем приложении. Но для этого
надо использовать стиль
LVS_GRADIENT
, как показано в листинге 4.7.
Листинг 4.7
using System.Runtime.InteropServices;
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hwnd, uint msg, int wParam, int lParam);
const int LVS_EX_GRADIENT = 0x20000000;
const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1000 + 54;
В статье «How to: Create a Custom Image Button Control», которую можно отыскать по адресу msdn2.microsoft.com/en-us/library/ms172532(VS.80).aspx, описывается процесс создания кнопки, которая может содержать в качестве фона любое изображение. В первых версиях .NET Compact Framework кнопку вообще нельзя было сделать цветной, так как не существовало свойства
BackColor
. Потом данный недостаток был исправлен, но стандартными средствами пока не получится отобразить на кнопке рисунок. С помощью примера, который приводится в статье, можно обойти это ограничение.
Список с расширенными возможностями
В другой статье — «How to: Create an Owner-Drawn List Box», расположенной по адресу msdn2.microsoft.com/en-us/library/ms229679(VS.80).aspx, — описывается создание списка
ListBox
с расширенными возможностями. В этом примере показано, как можно использовать графику и различные шрифты для отображения элементов списка.
Текстовое поле для ввода чисел
Очень часто программистам необходимо создавать текстовые поля, в которых можно указывать только числа. В статье «How to: Create a Numeric Text Box», которую можно найти по адресу msdn2.microsoft.com/en-us/library/ms229644(VS.80).aspx, рассказывается об одном из таких способов. Прочитав статью, вы поймете, как создавать текстовые поля, допускающие ввод только чисел, минуса, пробела и разделителя десятичных чисел.
Сортировка элементов ListView
Элемент управления
ListView
в .NET Compact Framework не поддерживает метод
Sort
, который позволил бы отсортировать элементы списка. В документации MSDN есть статья «How to: Sort ListView Items», в которой рассказывается о том, как решить эту проблему при помощи метода