Книга: Программирование КПК и смартфонов на .NET Compact Framework

ListBox

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,
 int wParam, string lParam);
private void textBox1_TextChanged(object sender, EventArgs e) {
 //поиск строки по вводимым символам
 listBox1.SelectedIndex =
  SendMessage(listBox1.Handle, LB_FINDSTRING, -1, textBox1.Text);
}
private void Form1_Load(object sender. EventArgs e) {
 listBox1.Items.Add("bank");
 listBox1.Items.Add("banana");
 listBox1.Items.Add("ball");
 listBox1.Items.Add("bounty");
 listBox1.Items.Add("bar");
}

После запуска проекта можно попробовать ввести в текстовом поле любое слово. Если в списке есть слова, начинающиеся с введенных символов, то они начнут выделяться в списке. Например, можно сначала ввести символ b, затем a и, наконец, l. Сначала будет выделено слово bank, а после третьего введенного символа выделение перейдет на слово ball.

Существует также сообщение LB_FINDSTRINGEXACT, которое осуществляет поиск по целому слову без учета регистра. Имеет смысл применять его, когда список содержит сотни записей и отыскивание нужного слова становится утомительным занятием. Чтобы показать применение этого сообщения, нужно добавить в предыдущий пример дополнительную кнопку и ввести код, приведенный в листинге 4.6.

Листинг 4.6

private void button1_Click(object sender, EventArgs e) {
 listBox1.SelectedIndex =
  SendMessage(listBox1.Handle, LB_FINDSTRINGEXACT, -1, "ball");
}

Оглавление книги


Генерация: 0.643. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз