![]() |
Unterschied bei Sender?
Hallo zusammen,
mir ist letztens etwas aufgefallen und wollte mal hören was der Unterschied zwischen den beiden folgenden Anweisungen ist, z.B.
Delphi-Quellcode:
Habe nur als Beispiel das ".caption" hinzugefügt. Mir geht es um den Weg, die Komponente über Sender zu identifizieren.
(Sender As TLabel).caption
TLabel(Sender).caption In meinem speziellen Fall ging an einer Stelle nur der zweite Weg - weiss aber leider nicht mehr, in welchem Zusammenhang. Gruß Igotcha |
Re: Unterschied bei Sender?
Bei der ersten Variante prüft Delphi vorher noch per is-Operator ob der Cast überhaupt zulässig ist, also Sender mit der Zielklasse abwärts verwandt oder identisch ist.
Bei der zweiten Variante fällt die Prüfung weg, und es wird einfach gecastet. Gruss, Fabian \\edit: Variante 1 macht im Grunde das hier (pseudocodeish):
Delphi-Quellcode:
if (Sender is TLabel) then
Rückgabe := TLabel(Sender); else raise Exception....; |
Re: Unterschied bei Sender?
//Ursprungstext gelöscht//
--- Kommando zurück! --- dizzy hat Recht. |
Re: Unterschied bei Sender?
Interessant ist in diesem Zusammenhang folgendes:
Ist Sender z.B. vom Typ TButton und du machst:
Delphi-Quellcode:
funktioniert das! :shock:
TForm(Sender).Caption := 'Hallo Welt';
Dies ist so, weil sowohl TForm, als auch TButton über die Eigenschaft Caption verfügen. Dies geht sogar mit Methoden... |
Re: Unterschied bei Sender?
Zitat:
Ich erstelle dynamisch Komponenten auf einer Form per Mausklick (ähnlich wie in der Delphi-IDE). Dazu habe ich der Form (die auch dynamisch erstellt wird) ein OnMouseDown-Ereignis mitgegeben, das ungefähr wie folgt verfährt:
Code:
Nun kann man auch z.B. ein Pagecontrol mittels dieses Ereignisses auf der Form erstellen. Aber wenn ich jetzt eine Komponente auf dem Pagecontrol erstellen möchte, ist der "Sender" ja nicht mehr vom Typ TForm, sondern vom Typ "TPageControl" bzw. "TTabSheet".
WENN TAG=1 ERSTELLE Label mit Parent TForm(SENDER)
WENN TAG=2 ERSTELLE DBEdit mit Parent TForm(SENDER) Ich stehe momentan vor dem Problem, dass ich deshalb jeder "Container"-Komponente ein eigenes OnMouseDown-Ereignis (analog oben) mitgeben müsste, wegen dem Cast bzgl. der Parent-Eigenschaft. Kann man das evtl. auch noch "neutral" erstellen, so dass obiger Pseudocode unabhängig vom der Klasse funktioniert? Gruß Igotcha |
Re: Unterschied bei Sender?
Zitat:
|
Re: Unterschied bei Sender?
Alle Klassen wie TForm oder TPanel etc. die als Container für weitere Komponenten dienen können sind imho von TComponent abgeleitet. (Oder doch von TWinControl? :gruebel: Müssteste mal nachschauen.)
Wenn du dann auf diesen gemeinsamen Vorfahren castest ist das sauber und möglich. Gruss, Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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