For events of the current type (i.e. the class or record that the current code is also a part of), simply the name of the event on its own suffices to access it. To access events of a different type (or a different instance of the same type), a Member Access Expression is used, appending an
: to the expression that represents the instance, followed by the event name:
lButton.Click += OnClick;
self to Avoid Ambiguity
self expression can be used to explicitly access an event on the current instance, in cases where the name of the field is hidden by a different identifier in scope:
Working with Events
Events are multi-cast and hold a chain list of Blocks that is maintained internally. As such, Events are not "read" or "written" in the commom sense, but rather new handlers can be added or removed to an event, using the spcialized
lButton.Click += OnClick; // add a handler ... lButton.Click -= OnClick; //remobve it agaun.
Additionally, events can be raised (or triggered, fired), which essentially will call all blocks subscribed to the event, in an undetermined order.
By default, only the class that declares an event can call it; external code can only add or remove handlers. An event is called using the regular Method Call expression, but requires parenthesis to be provided, even if the event is parameterless.
if assigned(OnClick) then OnClick(args); // foire the Events