Wie identifiziere ich den Tobject-Typ für den Absender in Delphi?

7

Ich erstelle Code für einen Dialog mit einer Radiogruppe als Teil eines Einstellungsformulars. Ein Teil unseres Codes ist, dass, wenn das Einstellungsformular geöffnet wird, die Radiogruppe angeklickt wird, die eine Menge Dinge konfiguriert (dh wenn der Radiobutton "aus" ist, dann ist eine Menge Konfigurationsmaterial versteckt).

Was ich will, ist zu wissen, wann der Benutzer tatsächlich auf die Radiogruppe klickt, anstatt dass er beim Öffnen des Einstellungsdialogs ausgelöst wird.

Also sieht der Code so aus:

%Vor%

Aber dieser Code wird auch ausgeführt, wenn der Einstellungsdialog geöffnet wird. Was soll ich da reinstellen, um nur auszuführen, wenn der Benutzer tatsächlich mit der Maus auf die Schaltfläche klickt?

Danke

    
Rob 29.04.2011, 14:06
quelle

3 Antworten

16

Testen Sie Ihren Absender

Sie können den Absender auf zwei Arten testen:

%Vor%

oder Sie können den Typ eines Absenders testen.

%Vor%

Das Schlüsselwort is prüft, ob ein Objekt von einem bestimmten Typ ist.
Beachten Sie, dass der Test if AObject is TObject immer wahr ist, da jedes Objekt von TObject abgeleitet ist.

Mehr Spaß mit der Typumwandlung

Die Tatsache, dass is auf den Objekttyp und alle Vorfahren testet, kann auch für andere Zwecke verwendet werden:

%Vor%

Wegen der booleschen Kurzschlußauswertung überprüft Delphi zuerst (sender is TControl) und nur weiter, wenn das stimmt. Machen Sie den nachfolgenden Test (TControl(Sender).Tag = 10) sicher zu verwenden.

Wenn Sie das Konstrukt TControl(Sender) nicht verstehen, können Sie sich über Typecasting informieren.
hier: Ссылка
und hier: Ссылка

    
Johan 29.04.2011, 14:31
quelle
9

Wenn ich Sie richtig verstehe, klicken Sie programmtechnisch auf Ihre Radiogroup, um den Anfangszustand des Formulars einzurichten, aber Sie haben zusätzlichen Code im Click-Handler, den Sie nicht ausführen möchten?

Wenn dies der Fall ist, sollten Sie in Erwägung ziehen, den Code zu entfernen, der den Status des Formulars auf eine eigene Methode festlegt, und ihn dann sowohl vom Radio-Click-Ereignis als auch vom Initialze / Show / Create Ihres Formulars aus aufzurufen.

Auf diese Weise können Sie denselben Code verwenden, um das Formular nach einem Benutzerklick auf den gewünschten Status zu setzen und es programmatisch zu setzen, ohne dass zusätzliche Logik erforderlich ist, wenn ein Benutzer mit dem Dialog interagiert. Oder vielleicht habe ich dein Problem völlig falsch verstanden ...

etwas wie das:

%Vor%     
Russell Troywest 29.04.2011 14:18
quelle
3

Probieren Sie einige Funktionen oder Eigenschaften aus:

%Vor%

Hinweis: wenn Sie den obj SENDER von ButtonClick( sender:TObject ) verwenden (zum Beispiel)   Absender = Klasse der Schaltfläche auf dem Klick = & gt; TButton

Also, TButton(Sender).properties oder Methoden etc ...

    
Emailx45 19.09.2012 16:31
quelle

Tags und Links