![]() |
Code vereinfachen
Ich habe folgenden Code:
Delphi-Quellcode:
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?
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; |
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:
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.
var i : Integer;
begin for i := 0 to PanelListe.Count-1 do TPanel(PanelListe).Visible := False; TPanel(PanelListe[DropDown.ItemIndex]).Visible := True; end; Gruß |
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.
|
Re: Code vereinfachen
Hi Luckie,
so auf die Stelle, untested und unueberlegt... ;)
Delphi-Quellcode:
Hope that helps,
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; Chris [edit]+1 deshalb, weil du sonst die ganzen 0en mit drinhast und das waere ja nicht so toll... ;)[/edit] |
Re: Code vereinfachen
Dank dir, werde ich mir nachher mit der neuen Tastatur mal ankucken. ;)
|
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; |
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] |
Re: Code vereinfachen
So geht's:
Delphi-Quellcode:
Danke euch noch mal. :thumb:
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; |
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