Action1Execute: Warum ist "TObject *Sender" leer?



  • hi,

    Wieso ist eigentlich der Sender in einer ActionExecute leer, wenn ich einem Button per Eigenscchaften eine Action zuweise.
    Ich kann zwar per ButtonClick die passende ActionExecute aufruffen und ihr den Sender als PArameter übergeben, jedoch macht mich das nicht alzu glücklich.

    TIA + mfg



  • Hallo

    kann ich nicht nachvollziehen. Bei meinem Builder ist bei einer TAction, die von einem TButton aufgerufen wird der Sender nicht Null, sondern entspricht genau der TAction.

    bis bald
    akari



  • void __fastcall TDataModuleFormMain::ActionIrrigationOnoffswitchExecute(
          TObject *Sender)
    {
    	TSpeedButton *sbutton = dynamic_cast<TSpeedButton*>(Sender);
    	if (sbutton->Down == false) {
    
    	}
    	else {
    
    	}
    
    	ActionOnoffbuttonChangeIconExecute(Sender);
    	// call action to change the image onto button		
    }
    

    Die Action wurde durch den Objektinspector mit einem Button verknüpft.
    Sender ist jedoch kein TSpeedButton.
    Nach der Zuweisung ist sbutton NULL.
    Nun ist mir nix mehr klar 😕



  • Dann schau doch mal nach was du da übergeben bekommst. Sender->ClassName() liefert dir den Typ.



  • Ohhh.... nu hab ichs kapiert :p
    ClassName ist TAction.
    Wie komm ich zu meinem TSpeedButton object, geht so wohl nicht, schade 😞



  • Warum willst du das überhaupt wissen. Das ist doch eigentlich der Vorteil von Actions, dass man das Verhalten mehrerer Steuerelemnte, die das gleiche machen sollen, zentralisieren kann.



  • Ich könnte ja prüfen welches Steuerelement die Action aufruft und darauf reagieren.
    Ich werd die ActionExecute einfach per OnClick aufrufen und Sender als Parameter übergeben.

    thx 🤡



  • Nochmal die Frage. Warum willst du wissen von wo die action aufgerufen wurde?



  • Um das Steuerelement ändern zu können (tauschen von images oder ähnliches) ohne sich über den Namen sorgen machen zu müssen.

    🤡



  • Hallo

    Dann hast du immer noch einen Denkfehler.
    Denn Actions sind ja grade dafür entwickelt worden, von mehreren, nicht festgelegten Control aus aufgerufen zu werden. Nehmen wir mal an, du würdest diese Action also nicht mit einem, sondern mit 5 oder 10 solcher Buttons ansprechen wollen, und jeder dieser Buttons muß nach jeder Ausführung aktualisiert werden (damit jeder Button den aktuellen Zustand der Aktion darstellt). Dann kommst du mit dem Sender auch nicht weiter.
    Hier hilft nur, die zu der Action gehörenden Controls unabhängig vom Sender direkt in der Action anzusprechen. Dabei helfen bei mehr als 3 Controls auch extra angelegte Arrays, siehe FAQ.

    bis bald
    akari



  • Bestimmte Aspekte des Aussehens der mit einer Action verbundenen Controls können ja von der Action selber gesteuert werden (Enabled, Caption, ImageIndex, Checked, Hint, HelpIndex, ShortCut). Eine Änderung eine dieser Eigenschaften in der Action wirkt sich auf alle mit dieser Action verbundenen Controls aus.


Anmelden zum Antworten