Um das einmal nochmal zusammenzufassen:
Man kann sich auch darauf verlassen, dass in Sender nur die richtige Komponente übergeben wird. Wenn man die Prozedur nicht falsch zuweist oder selbst mit einem falschen Parameter aufruft, dann wird das auch immer funktionieren und man kann einen harten Cast machen.
Delphi-Quelltext
Wenn dann aber doch eine falsche Komponente drin ist, dann bekommt man eine allgemeine Zugriffsverletzung, die man nicht so einfach zuordnen kann.
Deshalb sollte man dafür sorgen, dass eine EInvalidTypecast Exception ausgelöst wird, an der man dann zumindest sehen kann was das Problem ist. Dafür kann man dann einen weichen Cast durchführen.
Delphi-Quelltext
Dann kommt bei einem falschen Cast eine entsprechende Exception.
Noch besser ist natürlich gleich einen falschen Cast gar nicht erst zu versuchen und vorher abzufragen, ob der Cast erfolgreich sein wird.
Delphi-Quelltext
1: 2:
| if Sender is TImage then TImage(Sender). |
So habe ich es ja auch oben gemacht. Nach der Abfrage kann man natürlich immer einen harten Cast durchführen, da man sich dann sicher sein kann, dass es auch wirklich der passende Typ ist.
Mit dem is Operator kann man auch mehreren Komponententypen den selben Handler zuweisen.
Delphi-Quelltext
1: 2: 3: 4:
| if Sender is TLabel then ShowMessage(TLabel(Sender).Caption) else if Sender is TEdit then ShowMessage(TLabel(Sender).Text); |
Ich hoffe ich habe damit alle Klarheiten restlos beseitigt.
