ADDHANDLER
Register a method as an event handler for an event
WSupported on Windows
|
|
|
NSupported in Synergy .NET
|
ADDHANDLER(event, method_name)
or
event += method_name
Arguments
event
The name of an event or (in traditional Synergy only) an object reference to a field that is of the type Synergex.SYNNET.DotNetEvent or inherited from Synergex.SYNNET.DotNetEvent.
method_name
The name of the method that will handle the event (including the class for a static method or instance for a non-static method), or one of the following:
- In Synergy .NET, an instance of a delegate pointing to such a method.
- In traditional Synergy, an instance of a Synergex.SYNNET.DotNetDelegate object (or of a class inherited from Synergex.SYNNET.DotNetDelegate) pointing to such a method.
Discussion
The ADDHANDLER statement registers an event handler to an accessible event from an instantiated .NET class. In traditional Synergy, ADDHANDLER can only be used with code generated by the gennet/gennet40 utility.
Method_name is in the form instance.method. For example, if c1 is an instance of class1, method_name could be any of the following:
- c1.mymeth
- this.mymeth (for this instance in a class)
- parent.mymeth (for the parent’s instance in a class)
When registering delegates with ADDHANDLER, you are allowed to use generated classes as arguments, which allows a method like the following to be called as a delegate
method meth1 ;Definition of method registered with the delegate p1 ,@System.Object p2 ,@System.EventArgs proc . . . endmethod
You can register more than one event handler for an accessible event using ADDHANDLER. You can also register an event handler for an event more than one time. If an event handler is registered multiple times, the event handler will be called once for each registration when the event is fired.
See also
- EVENT statement
- REMOVEHANDLER statement
- RAISEEVENT statement
Examples
The example below defines a new .NET class that contains a delegate, an event, and a method to register for that event. (Note that the signature of this method must match that of the delegate.) The method is registered as an event handler for the event. The RAISEEVENT statement causes all registered event handlers to be executed, and parameter values passed to RAISEEVENT are in turn passed to the registered event handlers. When the event goes out of scope, all methods registered for the event are automatically unregistered.
class class1 public delegate mydelegate, void msg, a enddelegate public event myevent, @mydelegate public method mymethod, void msg, a proc open(2,o,"tt:") writes(2,"in mymethod "+msg) close(2) mreturn endmethod endclass c1, @class1 c1 = new class1() addhandler(c1.myevent, c1.mymethod) raiseevent(c1.myevent, "pass this message") removehandler(c1.myevent, c1.mymethod)