Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - dupError einer TStringList abfangen


Torsten - Fr 25.10.02 19:52
Titel: dupError einer TStringList abfangen
Moinsen Leute!

Wie aus dem Betreff zu sehen, will ich jenen Fehler abfangen.

Bekanntlich kann man über TStringList.Duplicates die Aktion bei Duplikaten festlegen.

Zunächst etwas Code.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
...

myList.Duplicates:=dupError;
myList.Sorted:=True;
myList.Add(Edit1.Text);
ListBox1.Clear;

 try
        ListBox1.Items.Add(myList.CommaText);
 except
        on EStringListError do ShowMessage('Fehler');
  end;

...


Kommen also doppelte Strings vor, so sollte eigentlich eine Message ausgegeben werden.
Dies ist aber nicht der Fall. Es kommt lediglich die Standard-Message. Die kommt auch, wenn man alles unbehandelt lässt.
Doch eben diese Message will ich nicht haben, sondern die Exception per Hand abfangen.

Kann mir jemand helfen?

Fragende Grüße

Torsten


aogwaba - Fr 25.10.02 20:40

Hi!

Starte das Programm vom WindowExplorer aus, oder schalte unter:
Project-Optionen-Compiler die Laufzeitfehler aus.
Die IDE fängt die Fehler sonst ab.

cu
waba


Schattengeist - Sa 26.10.02 11:24

Moin!
Das hat nichts mit den Laufzeitfehlern zu tun.
Du meinst wahrscheinlich eher: Tools / Debuggeroptionen / Sprachexceptions / Bei Delphi-Exceptions stoppen.
Allerdings ist das Woscht.
Wenn aktiviert, hält Delphi bei der Exception an (nicht immer zuverlässig an der richtigen stelle! Immer danach nochmal 'F7' drücken, damit man weiß, wo es aufgetreten ist).
Dann kann man sich in Ruhe alles ansehen, und danach das Programm mit 'F9' weiterlaufen lassen.
Das Anhalten mach Delphi auch bei abgefangenen Exceptions!
Wenn man die Exe so startet, hält Delphi -logischerweise:wink:- nicht an.
Folgender Code klappt bei mir:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
var ts:tstringlist;
begin
   ts:=TStringList.Create;
   ts.Sorted:=True;
   ts.Duplicates:=dupError;
   try
      ts.add('a');
      ts.add('a');
   except
      on e:EStringListError do begin
         ShowMessage('es sind doppelte da..');
      end;
      on e:Exception do begin
         ShowMessage('Irgendwas lief hier nicht richtig: '+e.Message);
      end;
   end;
   ts.free;
end;

MFG,cu,LLAP Schattengeist


aogwaba - Sa 26.10.02 13:10

Hi Schattengeist!

Hast natürlich recht, ist Blödsinn was da steht! :oops:
Blos gut das hier noch welche mitlesen!

cu
waba


Torsten - Sa 26.10.02 13:37

Moinsen Leute!

Besten Dank für die Antworten. Doch das kannte ich bereits alles.

Der Fehler lag bei mir. Habe ich eben gerade erst gesehen.
Ich versuche in meinem Code die Exception abzufangen, wenn der Inhalt der StringList in die ListBox eingefügt wird.
Das ist natürlich Schwachsinn. Ich muss die Exception behandeln, wenn ich die StringList fülle. Ich Dussel.

@Schattengeist
Ja, logisch. So dachte ich, hätte ich es auch gemacht. Aber stimmt ja nicht.

Grüße

Torsten