Science, Tech, Math › Computer Science Understanding the Sender parameter in Delphi Event Handlers Share Flipboard Email Print Tim Klein/Photodisc/Getty Images Computer Science Delphi Programming Delphi Tutorials Advanced PHP Programming Perl Python Java Programming Javascript Programming C & C++ Programming Ruby Programming Visual Basic View More By Zarko Gajic Zarko Gajic Twitter Computer Science Expert MSCS, Computer Science, University of Osijek Zarko Gajic is experienced in SQL and has working knowledge of DB systems such as MS SQL Server, Firebird, Interbase, and Oracle. He is also proficient in XML, DHTML, and JavaScript. Learn about our Editorial Process Updated on January 18, 2018 Event handlers and the Sender procedure TForm1.Button1Click(Sender: TObject) ; begin ... end; Button1Click OnClick event The parameter "Sender" references the control that was used to call the method. If you click on the Button1 control, causing the Button1Click method to be called, a reference or pointer to the Button1 object is passed to Button1Click in the parameter called Sender. Let's Share Some Code For example, suppose we want to have a button and a menu item do the same thing. It would be silly to have to write the same event handler twice. To share an event handler in Delphi, do the following: Write the event handler for the first object (e.g. button on the SpeedBar) Select the new object or objects - yes, more than two can share (e.g. MenuItem1) Go to the Event page on the Object Inspector. Click the down arrow next to the event to open a list of previously written event handlers. (Delphi will give you a list of all the compatible event handlers that exist on the form) Select the event from the drop-down list. (e.g. Button1Click) OnClick procedure TForm1.Button1Click(Sender: TObject) ; begin {code for both a button and a menu item} ... {some specific code:} if Sender = Button1 then ShowMessage('Button1 clicked!') else if Sender = MenuItem1 then ShowMessage('MenuItem1 clicked!') else ShowMessage('??? clicked!') ; end; Note: the second else in the if-then-else statement handles the situation when neither the Button1 nor the MenuItem1 have caused the event. But, who else might call the handler, you could ask. Try this (you'll need a second button: Button2) : procedure TForm1.Button2Click(Sender: TObject) ; begin Button1Click(Button2) ; {this will result in: '??? clicked!'} end; IS and AS if Sender is TButton then DoSomething else DoSomethingElse; Edit box procedure TForm1.Edit1Exit(Sender: TObject) ; begin Button1Click(Edit1) ; end; {... else} begin if Sender is TButton then ShowMessage('Some other button triggered this event!') else if Sender is TEdit then with Sender as TEdit do begin Text := 'Edit1Exit has happened'; Width := Width * 2; Height := Height * 2; end {begin with} end; Conclusion As we can see, the Sender parameter can be very useful when used properly. Suppose we have a bunch of Edit boxes and Labels that share the same event handler. If we want to find out who triggered the event and act, we'll have to deal with Object variables. But, let's leave this for some other occasion. Cite this Article Format mla apa chicago Your Citation Gajic, Zarko. "Understanding the Sender parameter in Delphi Event Handlers." ThoughtCo, Feb. 16, 2021, thoughtco.com/understanding-sender-parameter-in-delphi-event-handlers-1058223. Gajic, Zarko. (2021, February 16). Understanding the Sender parameter in Delphi Event Handlers. Retrieved from https://www.thoughtco.com/understanding-sender-parameter-in-delphi-event-handlers-1058223 Gajic, Zarko. "Understanding the Sender parameter in Delphi Event Handlers." ThoughtCo. https://www.thoughtco.com/understanding-sender-parameter-in-delphi-event-handlers-1058223 (accessed June 3, 2023). copy citation Featured Video