Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Für 2 If Anweisungen nur eine Else?


bruce185 - Fr 24.02.06 19:16
Titel: Für 2 If Anweisungen nur eine Else?
hi,
ich wollte mal fragen wie man für 2 If anweisungen nur eine Else funktion machen kann, z.B. wenn keiner der 2 If anweisung zutrifft dann kommt die Else anweisung dran.

bsp:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if (Edit1.Text = 'Hallo'then
begin
  Richedit1.Lines.Add('Diese Funktion ist gültig.');
end;

if (Edit1.Text = 'Hi'then
begin
  Richedit1.Lines.Add('Diese Funktion ist gültig.');
end;

else
begin
  Richedit1.Lines.Add('Diese Funktion ist ungültig.');
end;


nur weiss ich nicht wo ich die Else funktion jetzt machen muss das es erst ausgeführt wird, wenn keiner der 2 If anweisung zutrifft. Für jede hilfe bin ich euch sehr dankbar :wink:

Gruss Andreas


AXMD - Fr 24.02.06 19:23


Delphi-Quelltext
1:
2:
3:
4:
if (Edit1.Text = 'Hallo'or (Edit1.Text = 'Hi'then
  RichEdit1.Lines.Add('Funktion ist gültig')
else
  RichEdit1.Lines.Add('Funktion ist ungültig');


AXMD


afk - Fr 24.02.06 19:23


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
if (Edit1.Text = 'Hallo'then
begin
  Richedit1.Lines.Add('Diese Funktion ist gültig.');
end else begin
  if (Edit1.Text = 'Hi'then
  begin
    Richedit1.Lines.Add('Diese Funktion ist gültig.');
  end else begin
    Richedit1.Lines.Add('Diese Funktion ist ungültig.');
  end;
end;



Gruß Axel


Jetstream - Fr 24.02.06 19:24

schonmal auf compile gedrückt ? der code läuft gar nicht, weil dem else keine if-bedingung zugewiesen werden kann.

muddu so schreiben:

user profile iconbruce185 hat folgendes geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if (Edit1.Text = 'Hi')or(Edit1.Text = 'Hallo'then
begin
  Richedit1.Lines.Add('Diese Funktion ist gültig.');
end

else
begin
  Richedit1.Lines.Add('Diese Funktion ist ungültig.');
end;



Du bemerkst, dass ich nach dem 'end' vor 'else' das semikolon gelöscht habe, das muss so sein, da delphi sonst die if-bedingung als abgeschlossen ansieht und kein else mehr erwartet.


Gandi22 - Fr 24.02.06 19:36

Falls Du eine or-Allergie hast (oder zwischen 'Hallo' und 'Hi' unterscheiden musst) kannst Du's auch so machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if (Edit1.Text = 'Hallo'then  
begin  
  Richedit1.Lines.Add('Diese Funktion ist gültig.');  
end
else if (Edit1.Text = 'Hi'then  
begin  
  Richedit1.Lines.Add('Diese Funktion ist gerade noch so gültig.');  
end 
else  
begin  
  Richedit1.Lines.Add('Diese Funktion ist ungültig.');  
end;


Viel Spaß beim iffen thenen und elsen :party:


bruce185 - Fr 24.02.06 19:48

Vielen Dank für die Schnelle Hilfe,
also genau das habe ich gebraucht afk und Gandi22, also dein Code
Jetstream könnte ich nicht bei meinem Code einbauen weil für die
erste If anweisung kommt ein anderer befehl rein z.B. Form2.ShowModal;
und bei der zweiten If anweisung kommt z.B. Form3.ShowModal;
deshalb kann ich nicht mit or also oder machen, aber trotzdem vielen dank. :lol:

Gruss Andreas


bms - Fr 24.02.06 21:27

Also ich möchte mal diese Gelegenheit dazu nutzen um auf eine eventuelle Fehlerquelle hinzuweisen.

Dieses Beispiel gibt ein falsches Ergebins raus. Auch wenn s1 nicht gleich s2 ist, so kriegt man es denoch nicht mitgeteilt. Allerdings liegt der Fehler nicht bei Delphi, sondern beim Programmierer. Zwar ist der Fehler sichtbar, aber es ist dennoch ein netter Flüchtigkeitsfehler.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  s1, s2, s3: String;
begin
  s1 := Edit1.Text;
  s2 := Edit2.Text;
  s3 := Edit3.Text;

  if s1 = s2 then
    if s2 = s3 then ShowMessage('s2 ist gleich s3')
  else
    ShowMessage('s1 ist ungleich s2')
end;


Deshalb sollte man bei verschachtelten IF Abfragen immer begin und end benutzen. Dann kommt es auch nicht zu dummen Fehlern ;)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  if s1 = s2 then
  begin
    if s2 = s3 then ShowMessage('s2 ist gleich s3')
  end
  else
    ShowMessage('s1 ist ungleich s2')


Hier kommt das gewünschte Ergebnis raus.

Und jetzt jeder für sich: wo ist der Fehler? Jeder erfahrener Delphianer sollte den sofort sehen ;)