Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Цикл нажатия Button


Автор: malxazibb 30.9.2009, 16:14
Привет всем.

Может кто подскажет.
На форме лежат Button1, ComboBox1, ComboBox2, ComboBox3, ComboBox4;
При создании форми появляется ComboBox1 остальние не видни. При нажатии Button1 появляется ComboBox2.

вопрос такои (както сам не смог): хочу чтоб при втором нажатии Button1 появлялас ComboBox3, при следуюшем нажатии ComboBox4 и т.д.


заранее благодарен.

Автор: Rodman 30.9.2009, 16:20
1. Проверять видимость уже открытых комбобоксов и следующий открывать
2. Сделай глобальную переменную или массив де записуй кто у тя светится а кто нет

Автор: AKATAN 30.9.2009, 17:00
Задача весьма тривиальная.

Не надо массив. Просто можно юзать свойство Visible у комбобоксов.

Держи код юнита:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    ComboBox4: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
    procedure ComboBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Visible := false;

  ComboBox2.Visible := false;
  ComboBox3.Visible := false;
  ComboBox4.Visible := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ComboBox1.Visible then
    begin
     ComboBox1.Visible := false;
     ComboBox2.Visible := true;
    end else

  if ComboBox2.Visible then
    begin
     ComboBox2.Visible := false;
     ComboBox3.Visible := true;
    end else

  if ComboBox3.Visible then
    begin
     ComboBox3.Visible := false;
     ComboBox4.Visible := true;
    end

end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
  ComboBox3.Visible := true;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
begin
  ComboBox4.Visible := false;
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  Button1.Visible := true;
end;

end.

Автор: THandle 30.9.2009, 17:13
Если имена именно такие(стандартные, по порядку), можно сделать как-то так:
Код


{ Количество ComboBox'ов }
const
  CB_COUNT = 5;

procedure TForm2.Button1Click(Sender: TObject);
{$J+}
const
  Number: Integer = 2;
{$J-}
begin
  if Number <= CB_COUNT then
  begin
    TControl(FindComponent('ComboBox' + IntToStr(Number))).Visible := True;
    Inc(Number);
  end;
end;


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

Автор: malxazibb 30.9.2009, 21:16
Друзя собеседники сам нашол виход по моему идеальный:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Visible:=true;
ComboBox2.Visible:=false;
ComboBox3.Visible:=false;
ComboBox4.Visible:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
case (Sender as TButton).Tag of
0: ComboBox2.Visible:=true;
1: ComboBox3.Visible:=true;
2: ComboBox4.Visible:=true;
end;
with (Sender as TButton) do
Tag:=Tag+1;
end;

end.


спасибо всем за подсказки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)