Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Else wird übersprungen... vielleicht bin ich doch zu müde..


Richard - So 07.08.05 07:59
Titel: Else wird übersprungen... vielleicht bin ich doch zu müde..
Vielleicht kann mir jemand von euch sagen, warum er hier das else überspringt und mir keine msgbox raushaut, ich glaube allerdings, ich bin zu müde und der kaffee zu hell *g*

achso und nochwas:

das hier finde ich reichlich unschön:

if edit1.Text='Administrator' then
if edit2.text='Richard' then

gab es unter delphi nicht sowas wie "if bla=bla and if blub=blub then" ?
dieses verschachtelte passt mir in c++ auch nicht... wie mach ich das in delphi?
er haut mir da immer ne fehlermeldung raus von wegen "string and boolean incompatible types"

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm7.Button1Click(Sender: TObject);
begin
if edit1.Text='Administrator' then
if edit2.text='Richard' then
begin
Form8 := TForm8.Create(self);
try
    Form8.ShowModal;
  finally
    Form8.Free;
end
end
else messagebox(1,'Kennwort oder Benutzername falsch, bitte neu eingeben','',0)
end;
end.
:evil:

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt.


Holgerwa - So 07.08.05 08:10

Hallo,

so sollte es funktionieren:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm7.Button1Click(Sender: TObject);
begin
if (edit1.Text='Administrator'and (edit2.text='Richard'then
  begin
    Form8 := TForm8.Create(self);
    try
      Form8.ShowModal;
    finally
      Form8.Free;
  end
else 
  messagebox(1,'Kennwort oder Benutzername falsch, bitte neu eingeben','',0);
end.

Holger


Richard - So 07.08.05 08:18

gut, dass erste klappt, aber der untere part tut nicht :-/ er übergeht immer noch das if.

end
end
else
messagebox(1,'Kennwort oder Benutzername falsch, bitte neu eingeben','',0);
end;
end.


die ends müssen da stehen wegen dem finally usw


Clemens - So 07.08.05 09:11

Guten Morgen,
ich glaube das liegt an MessageBox. :idea:
Versuchs mal so:


Delphi-Quelltext
1:
application.messagebox('Kennwort oder Benutzername falsch, bitte neu eingeben','Fehler',MB_OKCANCEL);                    


Wenn du ein Windowssymbol möchtest, musst du glaub ich MessageDlg nehmen.


Gruß
Clemens


Holgerwa - So 07.08.05 09:22

Hallo,

@Richard: richtig, da war ein end zuwenig im obigen Code :oops:
Setze doch mal einen Breakpoint auf die "if"-Zeile, und dann gehst Du Schritt für Schritt (F7) weiter. Dann solltest Du direkt sehen, ob er an der MessageBox Zeile ankommt oder nicht.

Holger


GTA-Place - So 07.08.05 09:31


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm7.Button1Click(Sender: TObject);  
begin  
  if Edit1.Text = 'Administrator' then
  begin  
    if Edit2.text = 'Richard' then
    begin        
      try 
        Form8 := TForm8.Create(Self);   // 'Create()' sollte auch in 'try' und 'finally' sein
        Form8.ShowModal;  
      finally  
        Form8.Free;  
      end;  
     end  
     else 
       MessageBox(1'Kennwort oder Benutzername falsch, bitte neu eingeben'''0);
  end;  
end;


Nach korrekter Formatierung sieht man, dass wenn im Edit1.Text nicht 'Administrator' steht, else gar nicht aufgerufen wird. else wird nur aufgerufen, wenn zwar 'Administrator' im Edit1.Text steht, aber nicht 'Richard' im Edit2.Text.

Formatierung lohnt sich mal wieder. Dann nimmt man einmal die Version von Holgerwa, fügt noch ein end; hinzu und ändert die MessageBox ein bisschen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm7.Button1Click(Sender: TObject);
brgin
  if (Edit1.Text = 'Administrator'AND (Edit2.Text = 'R'then
  begin
    try
      Form8 := TForm.Create(self);
      Form8.ShowModal;
    finally
      Form8.Free;
    end;
  end
  else
    Application.MessageBox('Kennwort oder Benutzername falsch, bitte neu ' +
                           'eingeben''Fehler!', MB_OK);                   
end;

Und man bekommt was man will.


PS: Siehe Hilfe für Application.MessageBox();