Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - If then else??
Lazy - Di 05.05.09 18:15
Titel: If then else??
Hallo,
also ich möchte in ein Programm eine if then else verzweigung einbauen!!
Dass soll so funktionieren also:
Ich habe in ein label eine Frage geschrieben Was soll Berechnet werden? Z,K,P (Zinsen, Kapital, prozentsatz) und wenn man in ein edit Z,K oder p eingibet soll die entsprechende Groupbox erscheinen!!
Da ich noch ein anfänger bin hab ich keien ahnung wie ich das anstellen soll!
Danke schon mal für die antworten!
Mfg
Lazy
FinnO - Di 05.05.09 18:25
Zum Lösungsansatz:
Soetwas regelt man in der Regel über Radiobuttons oder eine Radiogroup.
Die Radiobuttons überprüfst du dann so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if Radiobutton1.Checked then doSomething; if Radiobutton2.Checked then doSomethingElse;
... |
deine Lösung wäre dann:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if Edit.Text = 'a' then doSomething else if Edit1.Text = 'b' then doSomethingElse else if Edit1.Text = 'c' then doSomethingVeryDifferent else Showmessage('Falsche Eingabe'); |
BenBE - Di 05.05.09 18:28
Einen recht guten Einstieg findest Du unter :arrow:
Crashkurs Delphi [
http://www.christian-stelzmann.de/artikel/crashkurs.htm] von
Christian S.
Für deinen Zweck wäre eine RadioGroupBox IMHO die bessere wahl. Dort kannst Du über RadioGroupName.ItemIndex den jeweils ausgewwählten Eintrag abfragen. In der Behandlung für das Ereignos OnChange kannst Du dann deine Behandlung schreiben, mit der Du, abhängig von der ausgewählten RadioGroup, deine verschiedenen GroupBoxes mit der Eigenschaft Visible sichtbar oder unsichtbar machst.
Lazy - Di 05.05.09 18:28
AHhh ich hab verstanden!! DANKE DAS HILFT MIR ECHT WEITER !!!
gruß
Lazy - Di 05.05.09 19:02
Eine kleine Frage hab ich noch :D also ich habe das mit if then else alles geschaft. Aber ich möchte versuchen das wenn ich Z schon eingegeben hab und dann K eingebe, dass die groupbox für Z verschwindet!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Edit7Change(Sender: TObject); begin if Edit7.Text = 'Z' then GroupBox1.Visible := True else if Edit7.Text = 'K' then GroupBox2.Visible := True else if Edit7.Text = 'p' then GroupBox3.Visible := True else showmessage('Bitte nur Z,K,p eingeben') ; end; |
Regan - Di 05.05.09 19:07
Wie wäre es, wenn du das Delphi sagst?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Edit7Change(Sender: TObject); begin if Edit7.Text = 'Z' then GroupBox1.Visible := True else begin GroupBox1.Visible := false; if Edit7.Text = 'K' then GroupBox2.Visible := True else begin GroupBox2.Visible := false; if Edit7.Text = 'p' then GroupBox3.Visible := True else begin GroupBox3.Visible := false; showmessage('Bitte nur Z,K,p eingeben') ; end; end; end; end; |
Alternativ: Halte ich für eine bessere Lösung. Gleich am Anfang alle auf
false setzten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Edit7Change(Sender: TObject); begin GroupBox1.Visible := false; GroupBox2.Visible := false; GroupBox3.Visible := false; if Edit7.Text = 'Z' then GroupBox1.Visible := True else if Edit7.Text = 'K' then GroupBox2.Visible := True else if Edit7.Text = 'p' then GroupBox3.Visible := True else showmessage('Bitte nur Z,K,p eingeben') ; end; |
Beides ungetestet.
ffgorcky - Di 05.05.09 19:23
Wenn Du gleich ziemlich hoch hinaus möchtest, könntest Du das auch mit case...of machen - also in etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| case Edit1.Text of 'Z':dannMachDieses; 'K':dannMachWasAnderes; 'p':dannMachDasDritte; end; |
Aber man sollte lieber zu Anfang nichts überstürzen.
Also immer ruhig Blut...
...und nimm leiber erst mal if...then und eventueel noch else if, wenn die anderen beiden nicht zutreffen.
FinnO - Di 05.05.09 19:25
Nö.
erstens müssen die zs, ks und ps in Hochkommata. Zweitens muss "der Abfragetyp von ordinalem wert sein" (oder so ähnlich)
Regan - Di 05.05.09 19:27
ffgorcky hat folgendes geschrieben : |
Wenn Du gleich ziemlich hoch hinaus möchtest, könntest Du das auch mit case...of machen - also in etwa so:
Delphi-Quelltext 1: 2: 3: 4: 5:
| case Edit1.Text of Z:dannMachDieses; K:dannMachWasAnderes; p:dannMachDasDritte; end; |
Aber man sollte lieber zu Anfang nichts überstürzen.
Also immer ruhig Blut... |
Crashkurs von Christian [http://www.christian-stelzmann.de/artikel/crashkurs.htm#ifcasebool]: |
Man kann mittels der Case-Anweisung nur die Werte von Variablen überprüfen, welche einen "ordinalen" Typ haben. Ein Datentyp ist dann "ordinal", wenn man in aufzählen kann. Alle Werte dieses Datentyps müssen einen eindeutigen Vorgänger (Ausnahme: der erste Wert) und einen eindeutigen Nachfolger (Ausnahme: der letzte Wert) besitzen. Ein ordinaler Typ ist zum Beispiel der Integer. Dies ist einsichtig, Integer enthält nur ganze Zahlen in einer definierten Reihenfolge, z.B. ...,4,5,6,7,... Dagegen nicht aufzählbar ist der Datentyp String, daher kann ein String nicht mit der Case-Anweisung verwendet werden.
|
@
ffgorcky: Editieren bringt nichts :wink: :P .
jaenicke - Di 05.05.09 20:13
Lazy hat folgendes geschrieben : |
Eine kleine Frage hab ich noch :D also ich habe das mit if then else alles geschaft. Aber ich möchte versuchen das wenn ich Z schon eingegeben hab und dann K eingebe, dass die groupbox für Z verschwindet! |
Ich weise noch einmal auf meine dreizeilige Lösung dafür hin... :roll:
jaenicke hat folgendes geschrieben : |
Sinnvoller wäre aber eher: Delphi-Quelltext 1: 2: 3:
| GroupBox1.Visible := Edit1.Text = 'z'; GroupBox2.Visible := Edit1.Text = 'k'; ... | |
Da fehlt nur noch die dritte Zeile, dann ist das bereits komplett alles...
Fertig also:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Edit7Change(Sender: TObject); begin GroupBox1.Visible := Edit7.Text = 'Z'; GroupBox2.Visible := Edit7.Text = 'K'; GroupBox3.Visible := Edit7.Text = 'p'; if not (GroupBox1.Visible or GroupBox1.Visible or GroupBox1.Visible) then ShowMessage('Bitte Z, K oder p eingeben!'); end; |
Wie aber bereits gesagt wurde, wäre eine Auswahl statt der umständlichen manuellen Eingabe sehr viel sinnvoller.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!