Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Ishodniki.Ru » Online книги » C++ Builder по шагам

Шаг 22 - Компоненты TListBox, TComboBox

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

Как пример возьмем приложение, генерирующее случайную спецификацию название машины по списку названий, цветов и годов выпуска. Форма подойдет такая:

gif/22_1.gif (4642 b)

Я здесь вид немного приукрасил с помощью панели, рассмотренной в предыдущем шаге. На правой панели - это не TEdit с TListBox'ом (хотя по дествию нет никакой разницы), а TComboBox с установленным Style=csSimple. Для трех кнопок "Добавить" установлен один обработчик - AddClick.

Ко мне пришло одно письмо, в котором автор, в принципе справедливо, осудил мой выбор TList вместо STL'овского vector. Ради интереса в листинге будет использован vector.

#include <vector.h>
TForm1 *Form1;
using namespace std;
vector<TComboBox*> cmbv(0);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
randomize();
cmbv.push_back(CarName);
cmbv.push_back(CarColor);
cmbv.push_back(CarYear);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AddClick(TObject *Sender)
{
TComponent* snd=(TComponent*)Sender;
cmbv[snd->Tag]->Items->Add(cmbv[snd->Tag]->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RandomSeed(TObject *Sender)
{
ResultCar->Text=
  CarName->Items->Strings[random(CarName->Items->Count)]+" "
          +
  CarColor->Items->Strings[random(CarColor->Items->Count)]+" "
          +
  CarYear->Items->Strings[random(CarYear->Items->Count)]+" year";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LikeIt(TObject *Sender)
{
ResultCar->Items->Add(ResultCar->Text);
}

Теперь обсудим логику. Для сокращения кода в начале программы создается вектор указателей на ComboBox1, ComboBox2, ComboBox3. Чтобы должным образом реагировал обработчик Add, кнопкам "Добавить" свойству Tag присвоены последовательно значения 0, 1, 2. Но это так, маленькая оптимизация. Теперь, при нажатии RandomSeed при помощи генератора случайных чисел (кстати, перезапущенного в начале) выбирается элемент и выводится в список ResultCar. Если что, машину можно добавить в список кнопкой LikeIt.

В свойства Items, редактор которого открывается двойным щелчком, я ввел несколько вариантов, чтобы было, из чего выбирать. Вот что мне моя программа выдала:

gif/22_2.gif (1656 b)

Полезные свойства у TListBox:

  • Items - содержит элементы списка.Это свойство типа TStrings, который очень поход на TList своими методами.
  • Sorted - разрешает автоматическую сортировку строк списка.
  • ItemIndex - номер выбранного элемента, начинаюс 0. Если ни один не выбран, то значение будет -1.
  • MultiSelect - разрешает выделение нескольких элементов сразу. В этом случае ItemIndex равен элементу c фокусом.
  • ExtendedSelect - если MultiSelect=true, разрешает выделение элементов клавишей Shift или Ctrl
  • Selected[] - выдает, выбран ли элемент под этим индексом.
  • TopIndex - номер верхнего видимого элемента

Поскольку TListBox и TComboBox не прямые потомки, то некоторые свойства не совпадают. Напрмиер, в TComboBox нет MultiSelect, ExtendedSelect, Selected, TopIndex. Зато есть такие свойства:

  • Text - введенный в поле текст
  • SelText - выделенный в поле ввода текст
  • SelStart - начало выделения
  • SelLength - длина выделения
  • MaxLength - максимальная длина вводимой строки
  • DropDownCount - высота выпадающего списка
  • DroppedDown - определяет, выпал список или нет. Позволяет программно управлять этим событием.
  • Style - определяет внешний вид списка. Основные значения: csDropDown - выпадающий список с областью ввода, csDropDownList - выпадающий список без возможности редактирования ввода, csSimple - комбинация области ввода и обыкновенного списка.

Рассмотрели много свойств, по-моему, неплохой пример был. В общем, хорошо :). В следующем шаге будет рассмотрен компонент TActionList.

 Предыдущий шаг | Оглавление | Следующий шаг

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру