Stille Exceptions

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu VCL-Exception-Klassen

VCL-Anwendungen zeigen für die meisten Exceptions, die im Quelltext nicht speziell berücksichtigt wurden, ein Meldungsfenster mit dem Meldungsstring aus dem Exception-Objekt an. Sie können aber auch "stille" Exceptions definieren, die standardmäßig nicht zur Anzeige einer Fehlermeldung führen.

Stille Exceptions sind hilfreich, wenn der Benutzer über eine Exception nicht benachrichtigt, die betreffende Operation aber abgebrochen werden soll. Das Abbrechen einer Operation entspricht der Verwendung der Prozeduren Break bzw. Exit in einem Block, kann jedoch zur Fortsetzung des Abbruchs durch mehrere Ebenen verschachtelter Blöcke führen.

Stille Exceptions sind vom Exception-Standardtyp EAbort abgeleitet. Die Standard-Exception-Behandlungsroutine für VCL-Anwendungen zeigt das Dialogfeld mit der Fehlermeldung für alle eingehenden Exceptions außer denen an, die von EAbort abgeleitet wurden.

Anmerkung:  In Konsolenanwendungen wird für jede unbehandelte EAbort-Exception ein Dialogfeld mit einer Fehlermeldung angezeigt.

Zum Auslösen stiller Exceptions können Sie eine schnellere Methode verwenden. In diesem Fall wird das Objekt nicht manuell erstellt. Stattdessen rufen Sie die Prozedur Abort auf. Abort löst automatisch eine EAbort-Exception aus, die ohne Anzeige einer Fehlermeldung zum Abbruch der aktuellen Operation führt.

Anmerkung:  Abort und abort.abort unterscheiden sich in einer Hinsicht: abort beendet die Anwendung.

Der folgende Code zeigt ein einfaches Beispiel zum Abbruch einer Operation. In einem Formular mit einem leeren Listenfeld und einer Schaltfläche kann der folgende Quelltext für das Ereignis OnClick der Schaltfläche verwendet werden:



 procedure TForm1.Button1Click(Sender: TObject);
 var
 I, J : Integer;
 begin
   for J := 1 to 10 do {zehn Schleifendurchläufe }
     for J := 1 to 10 do {zehn Schleifendurchläufe }
     begin
       ListBox1.Items.Add(IntToStr(I) + IntToStr(J));
       if I = 7 then Abort; { nach dem 7. Durchlauf der äußeren Schleife abbrechen }
     end;
 end;



 void __fastcall TForm1::Button1Click(TObject *Sender)
 {
   for (int i = 1; i <= 10; i++) // Schleife zehnmal verarbeiten
     for (int j = 1; j <= 10; j++) // Schleife zehnmal verarbeiten
     {
       ListBox1->Items->Add(IntToStr(i) + IntToStr(j));
       if (i == 7)
         Abort(); // Nach dem 7. Durchlauf der äußeren Schleife abbrechen
     }
 }



Beachten Sie, dass in diesem Beispiel sowohl die innere als auch die äußere Schleife durch Abort verlassen wird, nicht nur die innere Schleife.

Siehe auch