Autor |
Beitrag |
Lazy
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 05.05.09 18:15
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
|
|
jaenicke
      
Beiträge: 19322
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.05.09 18:23
Also da fällt mir vor allem das dazu ein...
Einen sehr guten Crashkurs findest du hier:
crashkurs.christian-stelzmann.de
und die neue Version speziell ab Turbo Delphi:
www.christian-stelzm...shkurs_reloaded.html
Ein weiteres gutes Online-Buch:
de.wikibooks.org/wik...grammierkurs:_Delphi
Und wie if dabei aussieht: Delphi-Quelltext 1: 2: 3:
| if Edit1.Text = 'z' then GroupBox1.Visible := True else if ... | Sinnvoller wäre aber eher: Delphi-Quelltext 1: 2: 3:
| GroupBox1.Visible := Edit1.Text = 'z'; GroupBox2.Visible := Edit1.Text = 'k'; ... |
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 05.05.09 18:28
Einen recht guten Einstieg findest Du unter Crashkurs Delphi 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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Lazy 
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 05.05.09 18:28
AHhh ich hab verstanden!! DANKE DAS HILFT MIR ECHT WEITER !!!
gruß
|
|
Lazy 
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 05.05.09 19:02
Eine kleine Frage hab ich noch  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
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: 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
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: 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.
Zuletzt bearbeitet von ffgorcky am Di 05.05.09 19:29, insgesamt 2-mal bearbeitet
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: 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
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: 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: |
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  .
|
|
jaenicke
      
Beiträge: 19322
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.05.09 20:13
|
|