![]() |
Delphi-Version: 12 Athens
If ...and... and... and... then
Hallo,
bin mal wieder am grübeln: Es sind 4 checkboxen die wenn alle unchecked sind der Wert einer Variable auf 0 gesetzt werden soll. Ist jeweils z.B. nur eine oder zwei gecheckt erhält dieser einen anderen Wert. Beispiel: Nichts gecheckt = 0, nur Rabatt aktiv = 2, nur Provision = 4, Rabatt+Provision aktiv = 6 usw. Jetzt wollte ich das mit diesem Statement abfragen:
Delphi-Quellcode:
Ich habe es schon mit oder ohne Klammern versucht, nach dem and nochmal if eingefügt. Komme nicht klar. Mal wird das and moniert das andere Mal nimmt Delphi die 0 nicht.
if (cb_rabatt.Checked= false) and (cb_StockOn.Checked:= false) and (cb_provision.Checked= false) and (cb_Serials.Checked= false)
then DataMod.Q_sArtikelArtOptionen.Value:= 0; Kann man wohl gar nicht mehrere and beim ifThenElse Statement verwenden? Über einen Lösungsvorschlag wäre ich sehr erfreut. LG Harry |
AW: If ...and... and... and... then
Hier muss der Doppelpunkt raus:
Delphi-Quellcode:
Gleichheitszeichen mit Doppelpunkt ist es eine Zuweisung; ohne Doppelpunkt ist es der Vergleich, den du hier brauchst.
(cb_StockOn.Checked:= false)
Und dann müsste noch ein
Delphi-Quellcode:
am Ende eingefügt werden, was passieren soll, wenn mind. eins checked=true ist.
else
|
AW: If ...and... and... and... then
Danke Papaschlumpf73,
manchmal sieht man den Wald vor lauter Bäume nicht...:oops: |
AW: If ...and... and... and... then
Hi,
I may not fully understand the question right, but have you tried this approach
Code:
every combination will result in different value in the range [0..15].
var
SettingsInt: Integer; begin SettingsInt := Ord(cb_rabatt.Checked) + Ord(cb_StockOn.Checked) shl 1 + Ord(cb_provision.Checked) shl 2 + Ord(cb_Serials.Checked) shl 3; Also you can switch to enums with a set to enhance handling and it is better readable from the enum names. |
AW: If ...and... and... and... then
Lesbarer fände ich persönlich so etwas:
Delphi-Quellcode:
type
TMyDataItems = (Discount, StockOn, Provision, Serials); TMyData = set of TMyDataItems; TfrmTest = class(TForm) cbDiscount: TCheckBox; cbStockOn: TCheckBox; cbProvision: TCheckBox; cbSerials: TCheckBox; ... private { Private-Deklarationen } function GetData: TMyData; public { Public-Deklarationen } end; ... function TfrmTest.GetData: TMyData; begin Result := []; if cbDiscount.Checked then Include(Result, TMyDataItems.Discount); if cbStockOn.Checked then Include(Result, TMyDataItems.StockOn); if cbProvision.Checked then Include(Result, TMyDataItems.Provision); if cbSerials.Checked then Include(Result, TMyDataItems.Serials); end; |
AW: If ...and... and... and... then
Zitat:
Viel einfacher:
Delphi-Quellcode:
if not cb_rabatt.Checked and not cb_StockOn.Checked and not cb_provision.Checked and not cb_Serials.Checked then
DataMod.Q_sArtikelArtOptionen.Value := 0; Zitat:
Deine Beschreibung ist:
Delphi-Quellcode:
Oder du machst es wie DeddyH geschrieben hat.
Value := 0;
if cb_rabatt.Checked then Value := Value + 2; if cb_StockOn.Checked then Value := Value + 4; if cb_provision.Checked then Value := Value + 8; if cb_Serials.Checked then Value := Value + 16; DataMod.Q_sArtikelArtOptionen.Value := Value; |
AW: If ...and... and... and... then
Und wäre nicht
Delphi-Quellcode:
noch etwas übersichtlicher?
if not (cb_rabatt.Checked or cb_StockOn.Checked or cb_provision.Checked or cb_Serials.Checked) then
DataMod.Q_sArtikelArtOptionen.Value := 0; |
AW: If ...and... and... and... then
Ich würde Konstanten definiern und jaenikes Vorschlag verwenden.
Delphi-Quellcode:
Const
O_RABATT = $01; O_STOCKON = $02; O_PROVISION = $04; O_SERIALS = $08; Procedure Value := 0; if cb_rabatt.Checked then Value := Value OR O_RABATT; //Hier ginge auch value := O_RABATT; if cb_StockOn.Checked then Value := Value OR O_STOCKON; if cb_provision.Checked then Value := Value OR O_PROVISION; if cb_Serials.Checked then Value := Value OR O_SERIALS; DataMod.Q_sArtikelArtOptionen.Value := Value; end; |
AW: If ...and... and... and... then
Und welche Vorteile hat so ein ausgedehnter Code gegenüber einem schlichten Zweizeiler, der augenblicklich eingängig ist?
|
AW: If ...and... and... and... then
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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-2025 by Thomas Breitkreuz