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


jaenicke - Di 05.05.09 18:23

Also da fällt mir vor allem das dazu ein...

Einen sehr guten Crashkurs findest du hier:
http://crashkurs.christian-stelzmann.de
und die neue Version speziell ab Turbo Delphi:
http://www.christian-stelzmann.de/index_tutorials_crashkurs_reloaded.html

Ein weiteres gutes Online-Buch:
http://de.wikibooks.org/wiki/Programmierkurs:_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 - 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 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.


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

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:

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.


@user profile iconffgorcky: Editieren bringt nichts :wink: :P .


jaenicke - 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:

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.