Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые / Компоненты выбора из списков.doc
Скачиваний:
31
Добавлен:
10.05.2015
Размер:
1.68 Mб
Скачать

Void __fastcall tForm1::ListBox1Click(tObject *Sender)

{

if(ListBox1->ItemIndex<0)

ShowMessage("Выбор не сделан");

else ShowMessage("Выбрана запись "+

IntToStr(ListBox1->ItemIndex)+": "+

ListBox1->Items->Strings[ListBox1->ItemIndex]);

}

По умолчанию начальное значение ItemIndex=-1.Что говорит о том, что ни один элемент списка не выбран. Начальное значениеItemIndex можно задать во время разработки программы. Например,

ListBox1->ItemIndex=5;

Если допускается множественный выбор (MultiSelect=true),то значение ItemIndex соответствует тому элементу списка, который находится в фокусе. При множественном выборе можно проверить, выбран ли данный элемент, по свойству Selected[int Index] типа bool. Например, следующий код отображает сообщения вида "Выбрана строка ...: ..." (похожие на предыдущий пример) обо всех выбранных строках:

Void __fastcall tForm1::ListBox1Click(tObject *Sender)

{

for(int i=0; i<ListBox1->Items->Count;i++)

if(ListBox1->Selected[i])

ShowMessage("Выбрана запись "+

IntToStr(i+1)+": "+

ListBox1->Items->Strings[i]);

}

На способ множественного выбора при MultiSelect=true влияет еще свойство ExtendedSelect. Если ExtendedSelect=true, то выделить интервал элементов, можно удерживая клавишу Shift переводя курсор по элементам. Выделить не прилегающие друг к другу элементы можно, если удерживать во время выбора клавишу Ctrl. Если ExtendedSelect=false, то клавиши Shift и Ctrl при выборе не работают.

Свойство Columns определяет число столбцов, в которых будет отображаться список если он не помещается целиком в окне компонента ListBox .

Свойство Sorted позволяет упорядочить список по алфавиту. При Sorted=true строки в список добавляются не в конец, а по алфавиту.

Свойство AutoComplete, если установить его в true, позволяет пользователю быстро находить строку списка, нажимая клавишу, соответствующую ее первому символу.

В списке можно отображать не только строки, но и изображения. Свойство Style, установленное вlbStandard (значение по умолчанию) соответствует списку строк. Другие значенияStyle позволяют отображать изображения.

Значение lbOwnerDrawFixed иlbOwnerDrawVariable используются для занесения в список изображений. При этомlbOwnerDrawFixed означает, что высота всех элементов списка одинакова, а значениеIbOwnerDrawVariable означает, что высота всех элементов может быть различной.

При значении Style, равномlbOwnerDrawFixedилиIbOwnerDrawVariable, в момент когда должна рисоваться какая-то строка списка, наступает событиеOnDrawItem. Заголовок обработчика этого события имеет вид:

Void __fastcall tForm1::ListBox1DrawItem(tWinControl *Control, int Index, tRect &Rect, tOwnerDrawState State)

{

}

CheckListBox

Имеется еще один очень похожий на ListBox - это список с индикаторами CheckListBox, который расположен на вкладке Edditional.

Выглядит он так же, как ListBox, но около каждой строки имеется индикатор, который пользователь может переключать. Индикаторы можно переключать и программно, если список используется для вывода данных и необходимо в нем отметить какую-то характеристику каждого объекта, например, наличие товара данного наименования на складе.

Состояния индикаторов определяют два свойства: State и Checked. Оба эти свойства можно рассматривать как индексированные массивы, каждый элемент которого соответствует индексу строки. Общее количество элементов определяется свойством Count (только для чтения). Поскольку индексы начинаются с 0, то индекс последнего элемента равен Count -1

Свойства State и Checked можно устанавливать программно или читать, определяя установки пользователя. Например, операторы

CheckListBox1->Checked[1]=true;

CheckListBox1->State[2]=cbGrayed;

устанавливают индикатор второй строки списка CheckListBoxl в состояние выбранного, а индикатор третьей строки - в промежуточное состояние ( отсчет строк начинается с 0). Оператор

for(int i=0; i<CheckListBox1->Items->Count; i++)

if(CheckListBox1->Checked[i])

проверяет состояние всех индикаторов списка, и для выбранных пользователем строк осуществляет какие-то действия (в приведенном операторе на месте этих действий поставлено многоточие).

В качестве примера применения компонента рассмотрим создание редактора экзаменационной ведомости.

Поместим на форму компоненты CheckListBoxиRichEdit

В конструктор формы внесем код, позволяющий загрузить список группы в CheckListBox:

CheckListBox1->Items->LoadFromFile("C:\\Список.txt");

В компоненте CheckListBoxимеется событиеOnClickCheck,возникающее при каждом изменении состояния индикатора. Поэтому после каждого изменения можно переписывать всю ведомость.

RichEdit1->Clear();

RichEdit1->Paragraph->Alignment=taCenter; /* выравнивание по центру */

RichEdit1->SelAttributes->Style=

RichEdit1->SelAttributes->Style<<fsBold;

RichEdit1->Lines->Add("Экзаменационная ведомость");

RichEdit1->Lines->Add("");

RichEdit1->Paragraph->Alignment=taLeftJustify;

for(int i=0; i<CheckListBox1->Items->Count; i++)

if(CheckListBox1->Checked[i])

RichEdit1->Lines->Add(CheckListBox1->Items->Strings[i]);

В результате получаем список, в который входят только указанные в CheckListBoxфамилии.