ListBox

We use cookies. Read the Privacy and Cookie Policy

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");

}