Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi if-then-else (https://www.delphipraxis.net/31086-if-then-else.html)

LoL 4. Okt 2004 09:33


if-then-else
 
hallo zusammen,

warum bricht die abfrage bei diesem code ab wenn ein edit feld nich enabled ist
Delphi-Quellcode:
  if edit1.Enabled then
    if edit1.Text = '' then edit1.SetFocus
  else if edit2.Enabled then
    if edit2.Text = '' then edit2.SetFocus
  else if edit3.Enabled then
    if edit3.Text = '' then edit3.SetFocus
und bei der nicht? es müsste doch trotzdem der else teil ausgeführt werden! :gruebel:

Delphi-Quellcode:
  if (edit1.Enabled) and (edit1.Text = '') then edit1.SetFocus
  else if (edit2.Enabled) and (edit2.Text = '') then edit2.SetFocus
  else if (edit3.Enabled) and (edit3.Text = '') then edit3.SetFocus

sakura 4. Okt 2004 09:36

Re: if-then-else
 
Zitat:

Zitat von LoL
warum bricht die abfrage bei diesem code ab wenn ein edit feld nich enabled ist

Weil das ELSE anders angewandt wird als Du es wolltest. Der Compiler achtet nicht! auf Einrückungen.
Code:
  if edit1.Enabled then
    if edit1.Text = '' then edit1.SetFocus [color=#ff001b]else[/color]
  else if edit2.Enabled then
    if edit2.Text = '' then edit2.SetFocus [color=#ff001b]else[/color]
  else if edit3.Enabled then
    if edit3.Text = '' then edit3.SetFocus
...:cat:...

LoL 4. Okt 2004 09:38

Re: if-then-else
 
und wenn man das in einen anweisungsblock einschließt? (begin end)

Treffnix 4. Okt 2004 09:39

Re: if-then-else
 
Dann würde es gehen. ( sofern man es richtig macht ;) )

LoL 4. Okt 2004 09:47

Re: if-then-else
 
nach sakuras methode geht es nicht

wenn bed1, bed2, bed2 dann mache was

jetzt springt er aber ganz raus!

alcaeus 4. Okt 2004 09:52

Re: if-then-else
 
Hi Lol,

hier ein Beispiel mit begin und end:
Delphi-Quellcode:
if edit1.Enabled then
begin
  if edit1.Text = '' then
    edit1.SetFocus
end
else if edit2.Enabled then
begin
  if edit2.Text = '' then
    edit2.SetFocus
end
else if edit3.Enabled then
begin
  if edit3.Text = '' then
    edit3.SetFocus
end;
IMHO sieht aber deine zweite Möglichkeit sauberer aus.

Greetz
alcaeus

Treffnix 4. Okt 2004 10:16

Re: if-then-else
 
Zitat:

Zitat von LoL
nach sakuras methode geht es nicht

wenn bed1, bed2, bed2 dann mache was

jetzt springt er aber ganz raus!

Sakuras Quelltext sollte auch keine Lösung sein. Er wollte dir nur verdeutlichen, wie Delphi deinen Quelltext interpretiert, nämlich dass das Else zum "inneren" statt zum "äußeren" If-Then gezählt wird.

himitsu 4. Okt 2004 10:41

Re: if-then-else
 
nochmal genau dazu, warum dein 1. Versuch
Delphi-Quellcode:
if edit1.Enabled then
  if edit1.Text = '' then edit1.SetFocus
else if edit2.Enabled then
  if edit2.Text = '' then edit2.SetFocus
else if edit3.Enabled then
  if edit3.Text = '' then edit3.SetFocus
nicht geht - dort wird das else halt nicht, so wie von dir wohl gewünscht zu den "if edit_.Enabled then"-Abfragen gezählt - es wird halt immer auf die IF-Abfrage angewendet, welche direkt davor ist ... in deinem Fall halt so:
(sobald ein Edit-Feld nicht enabled ist, wird eben abgebrochen)
Delphi-Quellcode:
if edit1.Enabled then begin
  if edit1.Text = '' then begin
    edit1.SetFocus;
  end else begin
    if edit2.Enabled then begin
      if edit2.Text = '' then begin
        edit2.SetFocus;
      end else begin
        if edit3.Enabled then begin
          if edit3.Text = '' then begin
            edit3.SetFocus;
          end;
        end;
      end;
    end;
  end;
end;
Aber dein 2. Codeteil müßte doch funktionieren?

Delphi-Quellcode:
if edit1.Enabled and (edit1.Text = '') then edit1.SetFocus
else if edit2.Enabled and (edit2.Text = '') then edit2.SetFocus
else if edit3.Enabled and (edit3.Text = '') then edit3.SetFocus


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz