Читаем Интернет-журнал "Домашняя лаборатория", 2007 №9 полностью

Главное назначение элемента ListBox — предоставить пользователю возможность осуществлять выбор из отображаемых списком элементов. Свойство SeiectionMode позволяет указать, сколько элементов разрешается выбирать пользователю — один или несколько. Для работы с отобранными элементами имеется ряд свойств. SelectedItem и SeiectedIndex возвращают первый отобранный элемент и его индекс. Свойства SeiectedItems и SeiectedIndices возвращают коллекции, заданные классами SelectedObjectCollection и SelectedIndexCollection, которые дают возможность анализировать все отобранные пользователем объекты. Методы Contains и IndexOf позволяют определить, выбрал ли пользователь некоторый элемент. Добавлять или удалять элементы из этих коллекций нельзя.

Среди других методов и свойств ListBox — упомяну свойство MultiColumn, с помощью которого можно организовать показ элементов списка в нескольких столбцах; свойство HorizonalScrollBar, задающее горизонтальный скроллинг; методы BeginUpdate и EndUpdate, позволяющие повысить эффективность работы со списком. Все методы по добавлению и удалению элементов, стоящие после BeginUpdate, не будут приводить к перерисовке списка, пока не встретится метод EndUpdate.

У элемента управления ListBox большое число событий, с некоторыми из которых мы встретимся при рассмотрении примеров. Перейдем теперь к рассмотрению примеров работы с этим элементом управления и, как обещано, построим некоторый шаблон, демонстрирующий работу с двумя списками, когда пользователь может переносить данные из одного списка в другой и обратно. На рис. 24.4 показано, как выглядит форма, реализующая данный шаблон.



Рис. 24.4.Шаблон формы для обмена данными двух списков


На форме показаны два списка — listBox1 и listBox2, между которыми расположены две командные кнопки. Обработчик события Click первой кнопки переносит выбранную группу элементов одного списка в конец другого списка, (если включено свойство Sorted, то автоматически поддерживается сортировка списка). Переносимые элементы удаляются из первого списка. Вторая кнопка реализует операцию переноса всех элементов списка. Направление переноса — из левого списка в правый и обратно — задается заголовками (">", ">>") или ("<", "«"), изображенными на кнопках. Заголовки меняются автоматически в обработчиках события Enter, возникающих при входе в левый или правый списки — listBox1 или listBox2. Еще две командные кнопки, как следует из их заголовков, предназначены для закрытия формы с сохранением или без сохранения результатов работы пользователя. Таково общее описание шаблона. А теперь рассмотрим реализацию. Начнем с обработчиков события Enter наших списков:

private void listBox1_Enter(object sender, System.EventArgs e)

{

    /*** Событие Enter у списка возникает при входе в список ***/

    button1.Text = ">"; button2.Text =">>";

}

    private void listBox2_Enter(object sender,

    System.EventArgs e)

{

    /*** Событие Enter у списка возникает при входе в список ***/

    button1.Text = "<"; button2.Text ="<<";

}

Посмотрим, как устроены обработчики события Click для командных кнопок, осуществляющих перенос данных между списками:

private void button1_Click(object sender, System.EventArgs e)

{

   /* Обработчик события Click кнопки "> <"

        * Выборочный обмен данными между списками

        * ListBox1 <-> ListBox2******************/

    if(button1.Text == ">")

        MoveSelectedItems(listBox1, listBox2);

    else

        MoveSelectedItems(listBox2, listBoxi);

}

private void button2_Click(object sender, System.EventArgs e)

{

    /* Обработчик события Click кнопки ">> <<"

           * Перенос всех данных одного списка в конец другого списка

           * ListBox1 <-> ListBox2******************/

    if (button2.Text == ">>")

         MoveAllItems(listBox1, listBox2);

    else

         MoveAllItems(listBox2, listBox1);

}

Перейти на страницу:

Похожие книги