Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Code vereinfachen (https://www.delphipraxis.net/16438-code-vereinfachen.html)

Luckie 17. Feb 2004 08:41


Code vereinfachen
 
Ich habe folgenden Code:
Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case Combobox1.ItemIndex of
    0:
      begin
        pnlEspacenet.Visible := True;
        pnlUSPTO.Visible := False;
      end;
    1:
      begin
        pnlEspacenet.Visible := False;
        pnlUSPTO.Visible := True;
      end;
  end;
end;
In Abhängigkeit der Auswahl in der Kombobox werden Panels sichtbar gemacht. Die anzahl der Panels entspricht dabei der anzahl der Items in der Combobox. Bei zwei Itmes und zwei zuigehörigen Panels geht es ja noch, bei drei eventuell auch noch. Aber dann wird es schon unübersichtlich. Meine Frage nun, wie kann man das eleganter lösen?

Leuselator 17. Feb 2004 08:53

Re: Code vereinfachen
 
Hi Luckie,

Wenn Du (wie ich vermute) die Panels dynamisch erstellst, dan pack Sie in eine TList.
Anschließend kannst Du:
Delphi-Quellcode:
var i : Integer;
begin
  for i := 0 to PanelListe.Count-1 do TPanel(PanelListe).Visible := False;
  TPanel(PanelListe[DropDown.ItemIndex]).Visible := True;
end;
Wenn Du die nicht dynamisch erstellst, bliebe Dir noch eine Liste (oder Array), in dem Du die Component.Name's speicherst, dann kannst Du ähnlich herangehen.
Gruß

Luckie 17. Feb 2004 09:36

Re: Code vereinfachen
 
Nein, zur Entwurfszeit. Zur Laufzeit wäre etwas mühsam, da da noch Komponenten dreaufsitzen. Aber dein Code hat mich auf eine Idee gebracht. Ich könnte da was drhen mit FindComponenet und der Tag-Eigenschaft.

CalganX 17. Feb 2004 09:44

Re: Code vereinfachen
 
Hi Luckie,
so auf die Stelle, untested und unueberlegt... ;)

Delphi-Quellcode:
var
  i: integer;
begin
  for i:=0 to frmMain.ComponentsCout-1 do begin
    if frmMain.Components[i] is TPanel then
      if (frmMain.Components[i] as TPanel).Tag = cbAuswahl.ItemIndex+1 then
        (frmMain.Components[i] as TPanel).Visibe := true;
  end;
end;
Hope that helps,
Chris

[edit]+1 deshalb, weil du sonst die ganzen 0en mit drinhast und das waere ja nicht so toll... ;)[/edit]

Luckie 17. Feb 2004 09:46

Re: Code vereinfachen
 
Dank dir, werde ich mir nachher mit der neuen Tastatur mal ankucken. ;)

Sharky 17. Feb 2004 09:47

Re: Code vereinfachen
 
Oder diese Variante von Chackotays Code:

Delphi-Quellcode:
var
  i: integer;
begin
  for i:=0 to frmMain.ComponentsCout-1 do
  begin
    if frmMain.Components[i] is TPanel then
    begin
      (frmMain.Components[i] as TPanel).Visibe := (frmMain.Components[i] as TPanel).Tag = cbAuswahl.ItemIndex+1 ;
    end;
  end;
end;

CalganX 17. Feb 2004 09:52

Re: Code vereinfachen
 
Hi,
@Luckie: du meinst gemein. Treffnix Tastatur geht nicht und du gibst gleich wieder an... :warn: :mrgreen:

@Sharky: Waere auch eine Moeglich keit wenn es die Eigenschaft Visibe geben wuerde... :mrgreen:

Chris

[edit=Luckie]Tags korrigiert. Mfg, Luckie[/edit]

Luckie 17. Feb 2004 09:52

Re: Code vereinfachen
 
So geht's:
Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to Form1.ComponentCount - 1 do
  begin
    if Form1.Components[i] is TPanel then
    begin
      (Form1.Components[i] as TPanel).Visible := (Form1.Components[i] as
        TPanel).Tag = Combobox1.ItemIndex;
    end;
  end;
end;
Danke euch noch mal. :thumb:

Robert Marquardt 17. Feb 2004 12:02

Re: Code vereinfachen
 
Also ich fuelle mir ein array mit den Komponenten.
Ob dynamisch angelegt, oder mit FindComponent gefuellt ist egal.
Am besten eignet sich FormActivate dafuer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz