Шаг 12.
Вкладка Standard. Компонент TComboBox

    На этом шаге мы рассмотрим компонент TComboBox

    Компонент TComboBox (Комбинированный список) представляет собой вариант списка с присоединенным дополнительным полем, в котором отображается выбранный элемент списка. Это же поле может использоваться для ввода новых элементов или для быстрого поиска элемента по начальным символам. Если на экране отображается только поле без списка, то для раскрытия списка можно использовать комбинацию клавиш Alt+вниз, а для выбора элемента списка используются клавиши перемещения (клавиши со стрелками).

    Компонент TComboBox работает в пяти разных режимах, определяемых значением свойства Style.

    Перечислим возможные значения свойства Style компонента TComboBox.

   
Таблица 1. Значения для свойства Style
Значение Механизм работы списка
csDropDown Создается раскрывающийся список с возможностью редактирования. Свойство MaxLength определяет максимально допустимое число символов, которое можно ввести в это поле (значение 0 указывает на отсутствие ограничений). Текст, введенный пользователем, доступен с помощью свойства Text
csDropDownList Создается раскрывающийся список только для выбора значений, уже имеющихся в списке
csSimple Отличается от стиля csDropDown только тем, что список не является раскрывающимся
csOwnerDrawFixed Создается раскрывающийся список только для выбора значений с возможностью оформления пользователем
csOwnerDrawVariable Создается раскрывающийся список только для выбора значений с возможностью оформления пользователем. Элементы могут иметь разную высоту

    Вводимый текст может автоматически преобразовываться к верхнему регистру (если свойство CharCase имеет значение ecUpperCase), к нижнему (ecLowerCase) или никак не преобразовываться (ecNormal по умолчанию).

    Максимальное число элементов, одновременно отображаемых в видимой части списка, задается в свойстве DropDownCount. Чтобы открыть список из программы, свойству DroppedDown (Раскрыть) надо присвоить значение True.

    Понятия выделенная строка в раскрывающемся списке нет. В нем имеется только текущая выбранная строка (ее номер в списке хранится в свойстве ItemIndex). Соответственно нельзя и выделять строки списка. Единственный метод, связанный с выделением данных, - это процедура SelectAll, которая выделяет весь текст, введенный пользователем в присоединенное поле. При работе с раскрывающимся списком наиболее важными являются перечисленные ниже события.

    Перечислим основные события компонента TComboBox.

   
Таблица 1. События компонента TComboBox
Название Условия генерации
OnChange Пользователь изменил текст в присоединенном поле
OnDropDown Список раскрывается. Это событие необходимо обрабатывать, если содержимое списка может меняться во время работы программы. Тогда в обработчике этого события можно заново сформировать содержимое списка (свойство Items).

    Пример программы с использованием поля со списком приведен ниже, а результат ее выполнения показан на рис. 1, где выбранный элемент отображается на надписи.

    Поместите на форму компоненты: Label1, ComboBox1. Для Form1 создайте обработчик OnCreate:

procedure TForm1.FormCreate(Sender: TObject);
var
  i:Integer;
begin
   for i:=0 to 5 do
      ComboBox1.Items.Add ('Элемент  '+IntToStr(i));
end;

    Для компонента ComboBox1 - обработчик OnSelect:

procedure TForm1.ComboBox1Select (Sender: TObject);
var
   i:Integer;
begin
    i:=ComboBox1.ItemIndex;
    Label1.Caption:=ComboBox1.Items.Strings[i];
end;

    Если вы все сделали правильно, то у вас получится следующее:


Рис.1.Компонент TComboBox

   

    Приведем текст программы

unit Unit1;
  interface
   uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
  type
  TForm1 = class (TForm)
    ComboBox1: TComboBox;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Select(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
   var
  Form1: TForm1;
  implementation
  {$R *.dfm}
 procedure TForm1.FormCreate(Sender: TObject);
var
  i:Integer;
begin
   for i:=0 to 5 do
      ComboBox1.Items.Add ('Элемент  '+IntToStr(i));
end;
  procedure TForm1.ComboBox1Select (Sender: TObject);
var
   i:Integer;
begin
    i:=ComboBox1.ItemIndex;
    Label1.Caption:=ComboBox1.Items.Strings[i];
end;
  end.
Текст этого примера можно взять здесь.

    На следующем шаге мы рассмотрим компонент TScrollBar




Предыдущий шаг Содержание Следующий шаг