![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Привет друзья! Такой вот вопрос:
Есть у меня 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. |