Delphi-PRAXiS
Seite 1 von 2  1 2      

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

ToFaceTeKilla 28. Apr 2009 13:09


Case... else
 
Heyho,

hab mal ne Frage zu Case-Bedingungen:
Wenn ich einen Dialog mittels Case aufrufe
Delphi-Quellcode:
case MessageDlg('Wuppdi',mtError,[mbOk,mbNo,mbCancel],0) of
          mrOK : begin
                  ...
                  end;
          mrNo : begin
                 end;
     
          else : begin
                 end;
        end;
müsste dann nicht beim Klick auf Cancel der Else-Block ausgeführt werden? Also so, dass else alle Buttons umfasst, die nicht einzeln behandelt werden?
Bei mir wird das immer übersprungen...

DeddyH 28. Apr 2009 13:13

Re: Case... else
 
Stimmt, das else sollte alle Fälle abfangen, die zu keinem case-Label passen.

Mithrandir 28. Apr 2009 13:15

Re: Case... else
 
Tuts eigentlich auch... Aber das original Statement hat sicherlich noch was zwischen begin...end, oder? Sonst wird das nämlich gnadenlos wegoptimiert... ;)

taaktaak 28. Apr 2009 13:18

Re: Case... else
 
Vermutlich ist es das gleiche Problem, dashier behandelt wurde.

ToFaceTeKilla 28. Apr 2009 13:25

Re: Case... else
 
Zitat:

Zitat von taaktaak
Vermutlich ist es das gleiche Problem, dashier behandelt wurde.

Leider nicht, weil bei mir in dem else-Label ein exit steht. Quasi genau umgekehrter Fall. Auch wenn ich nen Breakpoint drauf setz, wird es nicht angesprungen Oo

DeddyH 28. Apr 2009 13:31

Re: Case... else
 
Zeig doch mal den Originalcode.

taaktaak 28. Apr 2009 13:34

Re: Case... else
 
Hmmm, seltsam, hab's ausprobiert:
Bei mir funktioniert das genau wie erwartet.


ähhhh - allerdings mit einem Unterschied: Nach else kein Doppelpunkt

Klaus01 28. Apr 2009 13:35

Re: Case... else
 
Moin,

hinter else kommt kein ":".
Einfach
else
begin
...
end;

Grüße
Klaus

ToFaceTeKilla 28. Apr 2009 13:39

Re: Case... else
 
Man beachte das mrCancel, was ich gerade mal noch zum Testen hinzugefügt hab...
Delphi-Quellcode:
case TypeCompare(aImpObj, aCurObj) of            
              2: blDoTblCheck := true;
              1: case MessageDlg( message, mtConfirmation, [mbYes,mbNo,mbCancel],0 ) of
                   mrNo: begin
                           aDeleteObj[aImpObjCount]:=1;
                           aActionProtocol.DoAddDBActionEventItem(customEvent);
                         end;
                   mrYes: begin
                           aImpObj.ID:= aCurObj.TypID;
                           blDoTblCheck:= TRUE;
                         end;
                   mrCancel : Exit;     //hab ich testhalber mal hinzugefügt, wird auch ignoriert

                 else
                   exit;    //wird ignoriert
                 end;
             else
                begin
                  aDeleteObj[aImpObjCount]:=1;
                  aActionProtocol.DoAddDBActionEventItem(customEvent);
                  blDoTblCheck:= false;
                  exit;
                end;
EDIT:
beim Klick auf Cancel springt er direkt in das else-Label der äußeren Case-Bedingung und zwar direkt auf exit, ohne die drei Anweisungen davor.

EDIT2:
Was mir noch aufgefallen ist, was dem Problem aber auch nicht abhilft, ist, dass die IDE(*) das else unterschiedlich einfärbt, je nachdem ob davor ein Semikolon steht oder nicht: mit Semikolon hat es die Farbe der Case-Bedingung und ohne die der begin...end eine Ebene tiefer bei mrYes usw.
*hab CN-Pack installiert, das färbt zusammengehörige Statements ein

himitsu 28. Apr 2009 14:29

Re: Case... else
 
Passiert nach diesem CASE noch etwas, oder ist da die Prozedur/Funktion zuende?
Wenn danach nichts mehr passiert, dann wird das Exit vermutlich auch wegoptiomiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 1 von 2  1 2      

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