![]() |
Case... else
Heyho,
hab mal ne Frage zu Case-Bedingungen: Wenn ich einen Dialog mittels Case aufrufe
Delphi-Quellcode:
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?
case MessageDlg('Wuppdi',mtError,[mbOk,mbNo,mbCancel],0) of
mrOK : begin ... end; mrNo : begin end; else : begin end; end; Bei mir wird das immer übersprungen... |
Re: Case... else
Stimmt, das else sollte alle Fälle abfangen, die zu keinem case-Label passen.
|
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... ;)
|
Re: Case... else
Vermutlich ist es das gleiche Problem, das
![]() |
Re: Case... else
Zitat:
|
Re: Case... else
Zeig doch mal den Originalcode.
|
Re: Case... else
Hmmm, seltsam, hab's ausprobiert:
Bei mir funktioniert das genau wie erwartet. ähhhh - allerdings mit einem Unterschied: Nach else kein Doppelpunkt |
Re: Case... else
Moin,
hinter else kommt kein ":". Einfach else begin ... end; Grüße Klaus |
Re: Case... else
Man beachte das mrCancel, was ich gerade mal noch zum Testen hinzugefügt hab...
Delphi-Quellcode:
EDIT:
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; 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 |
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. |
Re: Case... else
Ne, nach dem Case ist Schluss. Dann wird das wohl auch der Grund sein.
Ich seh auch gerade, dass wenn man hinter mrCancel mehr als exit schreibt, die Breakpoints auch wieder auftauchen... Also wird else einfach wegoptimiert, da die Prozedur in dem Falle eh die Programmsteuerung wieder abgibt. Danke fürs Augen öffnen :thumb: |
Re: Case... else
Auch wenn ich schon längere Zeit nicht mehr mit Delphi arbeite, dachte ich immernoch das es für soetwas default gibt...
|
Re: Case... else
Zitat:
find ich auch praktischer so, denn so ist es identisch zum IF-THEN-ELSE und {$ELSE} :angel: |
Re: Case... else
Urspünglich hies es ja OTHERWISE
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz