Autor Beitrag
Lazy
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19322
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
if Edit1.Text = 'z' then
  GroupBox1.Visible := True
else if ...
Sinnvoller wäre aber eher:
ausblenden Delphi-Quelltext
1:
2:
3:
GroupBox1.Visible := Edit1.Text = 'z';
GroupBox2.Visible := Edit1.Text = 'k';
...
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if Radiobutton1.Checked then
  doSomething;
if Radiobutton2.Checked then
  doSomethingElse;

...


deine Lösung wäre dann:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 05.05.09 18:28 
Einen recht guten Einstieg findest Du unter :arrow: Crashkurs Delphi von user profile iconChristian 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 05.05.09 18:28 
AHhh ich hab verstanden!! DANKE DAS HILFT MIR ECHT WEITER !!!

gruß
Lazy Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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!

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Di 05.05.09 19:07 
Wie wäre es, wenn du das Delphi sagst?
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Di 05.05.09 19:27 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Wenn Du gleich ziemlich hoch hinaus möchtest, könntest Du das auch mit case...of machen - also in etwa so:
ausblenden 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.


@user profile iconffgorcky: Editieren bringt nichts :wink: :P .
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19322
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.05.09 20:13 
user profile iconLazy hat folgendes geschrieben Zum zitierten Posting springen:
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:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Sinnvoller wäre aber eher:
ausblenden 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:
ausblenden 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.