|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Несколько ComboBox
Привет друзья! Такой вот вопрос:
Есть у меня 10 комбобоксов (ComboBox1, ComboBox2, ...) В начале все, кроме первого Visible := false. Идея такая, что при OnChange первого бокса - появляется второй, при изменении второго - появляется третий и т.д.. А при удалении данных из комбобокса (Text = '') следующий за ним скрывается. Вопрос: как сделать такие и ,возможно, какие-нибудь другие действия не плодя почти одинаковых процедур ComboBoxXChange? Потому что хотелось бы сделать больше, чем 10 комбобоксов. |
#2
|
||||
|
||||
Чем смогу - помогу
Тебе надо написать универсальную функцию, которая будет это все контролировать. Функция должна проверять изменение. Если хочешь все автоматом - запрограммируй таймер. Вот так как-то.
|
#3
|
|||
|
|||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ComboBox1: TComboBox; ComboBox2: TComboBox; ComboBox3: TComboBox; ComboBox4: TComboBox; ComboBox5: TComboBox; ComboBox6: TComboBox; ComboBox7: TComboBox; ComboBox8: TComboBox; ComboBox9: TComboBox; ComboBox10: TComboBox; procedure FormCreate(Sender: TObject); private { Private declarations } procedure ComboBoxesChange(Sender: TObject); public { Public declarations } end; var Form1: TForm1; const COMBOBOXCOUNT = 10; // общее количество ComboBox implementation {$R *.dfm} procedure TForm1.ComboBoxesChange(Sender: TObject); var cbTag: Integer; cb: TComponent; begin cbTag := (Sender as TComponent).Tag + 1; cb := FindComponent('ComboBox' + IntToStr(cbTag)); if cb = nil then Exit; with (cb as TComboBox) do if (Sender as TComboBox).Text = '' then begin Text := ''; OnChange(cb); Visible := False; end else Visible := True; end; procedure TForm1.FormCreate(Sender: TObject); var i: Integer; cb: TComponent; begin for i := 1 to COMBOBOXCOUNT do begin { Все ComboBox имеют имя вида ComboBoxn, где n — номер по порядку } cb := FindComponent('ComboBox' + IntToStr(i)); cb.Tag := i; (cb as TComboBox).Visible := False; (cb as TComboBox).OnChange := ComboBoxesChange; end; ComboBox1.Visible := True; end; end. Последний раз редактировалось Nyctos Kasignete, 02.10.2009 в 19:38. |