Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Wenn Sender kein TEdit oder eine abgeleitete Klasse ist geht nunmal der Cast nicht und da es sich bei AS um einen Cast mit Typüberprüfung handelt bekommst Du eine Exception
Das ist nun dann doch unsinnig.
Wenn man schon auf den Typ mit is prueft dann kann man doch danach einen harten Typecast ohne as machen. is und as sind aufwaendige Operationen.
Alternativ kann man mit try except die Exception von as abfangen
Nochmals zurück zur Frage von Udo: "Weshalb ist folgende Abfrage sinnlos?
if (sender as tedit).Name <>'Test' then..."
Wenn sender nicht vom Typ TEdit oder ein Nachkomme von TEdit ist, dann kann nicht gecastet werden.
Es muß deshalb vorher der Typ abgeprüft werden.
Die Lösung von Bernd: "if (sender is tcomponent) then
if tcomponent(sender).name <> 'Test' then" ist dann die allgemein gültigste. Denn TEdit und andere Komponenten sind von TComponent abgeleitet.
if (sender as tedit).Name <>'Test' then..."
Der eigentliche Unsinn dabei ist das man recht umstaendlich (und mit as aufwaendig) abprueft.
if Sender <> EditTest then ..
Es ist einfacher diesen einfachen Pointer-Vergleich mit der Komponente selbst zu machen. Es ist auch besser. Es koennen mehrere Komponenten den Namen 'Test' haben. Wer einen Handler schreibt der so etwas macht, der schreibt ein schwer verstaendliches und damit schwer wartbares Program
Comment