![]() |
if Abfragen; eine kleine Herausforderung
Hallöchen,
ich hab hier in einer Prozedur "einige" if-Abfragen. Ich finde einfach keinen Weg um die Proz. zu kürzen, es ist doch viel zum Scrollen und etwa die hälfte kommt noch dazu. Vielen Dank. Grüsse, Daniel :hi:
Code:
[b]procedure[/b] TMainFormMC2004.Check;
[i]//Überprüfen ob Items in Listviews < = > als die Konstanten sind //um entsprechende Buttons/RadioButtons auf Enabled/Disabled zu setzen[/i] [b]begin[/b] [b]if[/b] ListViewKKLok.Items.Count >= MaxLok -1 [b]then[/b] [b]begin[/b] ButtonKKLokOK.Enabled := False; [b]end[/b]; [b]if[/b] ListViewKKFkt.Items.Count >= MaxFkt -1 [b]then[/b] [b]begin[/b] ButtonKKFktOK.Enabled := False; [b]end[/b]; [b]if[/b] ListViewKKWei.Items.Count >= MaxWei -1 [b]then[/b] [b]begin[/b] ButtonKKWeiOK.Enabled := False; [b]end[/b]; [b]if[/b] ListViewKKMtr.Items.Count >= MaxMtr -1 [b]then[/b] [b]begin[/b] ButtonKKMtrOK.Enabled := False; [b]end[/b]; [b]if[/b] ListViewKKWei.Items.Count = 0 [b]then[/b] [b]begin[/b] ButtonKKWeiTrigger.Enabled := False; ButtonKKWeiSchalt.Enabled := False; [b]end[/b]; [b]if[/b] ListViewKKMtr.Items.Count = 0 [b]then[/b] [b]begin[/b] ButtonKKMtrLoks.Enabled := False; RadioButtonKKMtrAktivJa.Checked := False; RadioButtonKKMtrAktivNein.Checked := False; [b]end[/b]; [b]if[/b] ListViewKKWei.Items.Count > 0 [b]then[/b] [b]begin[/b] ButtonKKWeiTrigger.Enabled := True; ButtonKKWeiSchalt.Enabled := True; [b]end[/b]; [b]if[/b] ListViewKKMtr.Items.Count > 0 [b]then[/b] [b]begin[/b] ButtonKKMtrLoks.Enabled := True; [b]end[/b]; [b]if[/b] ListViewKKLok.Items.Count = 0 [b]then[/b] [b]begin[/b] ButtonKKLokLoeschen.Enabled := False; [b]end[/b] [b]else[/b] [b]if[/b] ListViewKKLok.Items.Count > 0 [b]then[/b] [b]begin[/b] ButtonKKLokLoeschen.Enabled := True; [b]end[/b]; [b]if[/b] ListViewKKFkt.Items.Count = 0 [b]then[/b] [b]begin[/b] ButtonKKFktLoeschen.Enabled := False; [b]end[/b] [b]else[/b] [b]if[/b] ListViewKKFkt.Items.Count > 0 [b]then[/b] [b]begin[/b] ButtonKKFktLoeschen.Enabled := True; [b]end[/b]; [b]if[/b] ListViewKKWei.Items.Count = 0 [b]then[/b] [b]begin[/b] ButtonKKWeiLoeschen.Enabled := False; [b]end[/b] [b]else[/b] [b]if[/b] ListViewKKWei.Items.Count > 0 [b]then[/b] [b]begin[/b] ButtonKKWeiLoeschen.Enabled := True; [b]end[/b]; [b]if[/b] ListViewKKMtr.Items.Count = 0 [b]then[/b] [b]begin[/b] ButtonKKMtrLoeschen.Enabled := False; [b]end[/b] [b]else[/b] [b]if[/b] ListViewKKMtr.Items.Count > 0 [b]then[/b] [b]begin[/b] ButtonKKMtrLoeschen.Enabled := True; [b]end[/b]; [b]if[/b] MultitraktionLoks.ListViewEingefuegt.Items.Count > MaxMtrLoks -1 [b]then[/b] [b]begin[/b] MultitraktionLoks.ButtonEinfuegen.Enabled := False; [b]end[/b] [b]else[/b] [b]if[/b] MultitraktionLoks.ListViewEingefuegt.Items.Count <= MaxMtrLoks -1 [b]then[/b] [b]begin[/b] MultitraktionLoks.ButtonEinfuegen.Enabled := True; [b]end[/b]; [b]end[/b]; |
Hallo Daniel,
Code:
kann zu folgender Form gebracht werden:
if ListViewKKLok.Items.Count >= MaxLok -1 then
begin ButtonKKLokOK.Enabled := False; end;
Code:
Alternativ legst Du Deine Komponenten alle auf ein gemeinsames Panel und deaktivierst nur dieses Panel, wenn die Situation es erfordert. Alle auf dem Panel befindlichen Komponenten werden dann ebenfalls deaktiviert.
ButtonKKLokOK.Enabled := (ListViewKKLok.Items.Count < MaxLok -1);
:firejump: Greeeeeeeeeeeeeetz, DrDangerous |
Zitat:
das fällt aus. Das Programm ist schon zu etwa 80% fertig und optisch kann ich da nichts mehr ändern. Vor allem hat das Design was mit der Hardware zutun, wozu das Programm gehört. Ich hab auf dem Hauptformular 5 TabSheets, worum auf jeder Seite ein paar Button, Edits sind. No Way. Grüsse, Daniel :hi: |
Moin Daniel B,
nur noch ein kleiner, allgemeiner, struktureller Tip (jawohl, ich ignoriere die Rechtschreibreform :mrgreen:) Bei Konstruktionen
Code:
kannst Du Dir das zweite if sparen.
[b]if[/b] ListView.Items.Count = 0 [b]then[/b]
[b]begin[/b] [b]end[/b] [b]else[/b] [b]begin[/b] [b]if[/b] ListView.Items.Count > 0 [b]then[/b] [b]begin[/b] [b]end[/b]; [b]end[/b]; Ein Count kann nur grösser oder gleich 0 sein. Wenn er nicht gleich null ist muss er grösser als 0 sein. |
Hi Chris (Seehase).
Die von dir angesprochene Verkürzung bei "Count"-Konstruktionen lässt sich durch den Vorschlag von Dr. Evi ... äh, Dangerous noch weiter verkürzen.
Code:
Insofern spart man auch hier noch jede Menge Code-Zeilen.
ButtonKKLokLoeschen.Enabled := (ListViewKKLok.Items.Count > 0);
Außerdem vermisse ich bei den ersten Prüfungen irgendwie das "else", z.B.:
Code:
Wenn die Listview jetzt weniger Items als gefordert hat, dürfte der Button IMHO nicht aktiviert werden, weil die Berücksichtigung dieses Zweiges fehlt. (Es sei denn, ich habe die Zeile vielleicht übersehen, oder die steckt in einem anderen Teil des Programms.)
if ListViewKKLok.Items.Count >= MaxLok -1 then
begin ButtonKKLokOK.Enabled := False; end; So, und wo war jetzt die Herausforderung? |
Moin Mathias,
deshalb schrieb ich auch "allgemeiner Tip". Wenn Du nicht gerade boolesche Werte setzen, sondern Befehlssequenzen ablaufen lassen willst, wirst Du wohl kaum um so eine If-Konstruktion herumkommen. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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