[AccessD] Classes and Events

jwcolby jwcolby at colbyconsulting.com
Mon Feb 9 11:50:32 CST 2009


Philippe,

Understand that only a combo can RAISE a combo event, only a command button can RAISE a command 
button event.  To RAISE an event means that an OBJECT "broadcasts" an event that it knows how to RAISE.

You can SINK the combo event in a class, IF you have dimensioned a combo variable "WithEvents", and 
IF you have captured a pointer to said combo in the class.

Stay tuned, you shall see how it is done.

John W. Colby
www.ColbyConsulting.com


philippe pons wrote:
> Hop, this is interesting:
>  A regular module cannot RAISE an event, but a class can
> 
> So following a previous post, a question arises:
> How would you raise a combo box event with a class?
> 
> TIA,
> 
> Philippe
> 
> 2009/2/9 jwcolby <jwcolby at colbyconsulting.com>
> 
>> A QUICK introduction to classes and events.
>>
>>
>> CLASSES:
>>
>> * The Code Behind Forms module in a form is a class module.
>> * A class is a module, but a module is not a class.
>> * A class has properties and behaviors that a module does not.
>> * A class is actually instantiated when a set statement is executed.  In
>> other words, an INSTANCE of
>> the class is loaded into memory, and stays in memory until it is
>> specifically unloaded.
>> * Like a module, a class can contain data (variables) and code.  However
>> the variables in a module
>> can only contain ONE value at a time.
>> * A class can be loaded into memory as many times as you want (limited only
>> by the size of your
>> memory) and EACH INSTANCE of a class can contain its own value in its
>> variables.
>> * All instances of a class SHARE code, but do not share variables.  In
>> other words, the code is only
>> loaded into memory one time, but the variables are loaded once per class
>> instance loaded.
>> * The class (and every object, including forms and controls) unloads from
>> memory when the last
>> variable holding a pointer to the object is set to nothing.
>> *A class has two built-in Events that fire, one as a class instance loads
>> (Class_Initialize), and
>> the other as the class instance unloads (Class_Terminate).
>>
>> Think of a class as a place to store information and code about some thing
>> in the real world.
>> Perhaps you have a clsPerson.  That class has a bunch of variables called
>> FirstName, LastName, SSN,
>> ColorHair, ColorEyes, Gender, Birthdate etc.  Load an INSTANCE of that
>> class and fill in the data
>> about John Colby, load another instance and fill in the data about Mary
>> Colby etc.  You might then
>> have a piece of code that takes the birthdate and calculates the current
>> age from that.  The data
>> and the code are all stored together in the class.
>>
>> EVENTS:
>>
>> Events can be thought of kind of like a radio transmission.  The radio
>> station transmits a signal,
>> but they have no idea whether anyone is listening.  In the case of events,
>> this is called "Raising
>> (or sourcing) and event".
>>
>> If someone is listening to that radio signal, then the person listening can
>> do whatever they want
>> with the signal they are receiving.  They can do nothing at all, they can
>> use it as a signal to
>> launch an attack on an enemy, they can enjoy music, they can…  The
>> important thing to understand
>> here is that what the listener does is up to the listener.
>>
>> In the case of events, receiving the signal is called "sinking" the event.
>>
>> Notice that the person broadcasting the signal doesn't know or care whether
>> anyone is listening, nor
>> do they know or care what the listener (if they even exist) does with the
>> signal.
>>
>> When you open a form, the form is constantly raising events.  It raises
>> OnOpen, OnClose, OnCurrent,
>> BeforeUpdate, AfterUpdate, MouseMove etc etc.  The events are raised
>> whether or not anyone is
>> listening.  The form neither knows nor cares whether anyone is listening to
>> (sinking) those events,
>> it is simply raising these events so that if anyone is listening to
>> (sinking) the events, they can
>> do whatever they want when the events fire.
>>
>> When you place a control on the form, the control raises events under
>> certain circumstances.  When
>> the control gets the focus it raises an OnFocus event, when it loses the
>> focus it raises a LostFocus
>> event, it raises a BeforeUpdate, AfterUpdate etc.  Of course these events
>> depend on what the user
>> does, in other words they don't happen unless the user manipulates the
>> control in the correct
>> manner, enters data for example.  But notice that while the control always
>> raises the event, it
>> neither knows nor cares whether anyone is listening, nor does it know or
>> care what the listener does
>> with the event if anyone is listening (sinking the event).
>>
>> This is a critical thing to understand, that the object raising an event
>> does not know nor care
>> about the listener, nor what the listener does.   The reason that this is
>> critical is because it
>> allows you to design an interface between objects which is totally
>> asynchronous or disconnected.
>> Have you ever built a subform and referenced a control on the parent form?
>>  Have you ever tried to
>> open that subform by itself?  It complains that it cannot find the control
>> on the parent.  The
>> subform is has a "connected" interface to the parent, without the parent it
>> cannot do its thing
>> correctly.  The event "Raise/Sink" interface eliminates that dependence.
>>  The object raising the
>> event does not depend on having a receiver of the event in order to
>> function correctly.  The
>> receiver of events does not depend on the broadcaster existing in order to
>> function, although of
>> course it cannot do whatever it would do with the events if they are not
>> being broadcast.  But each
>> side can be loaded and code can execute without the other side being
>> loaded, without compile errors etc.
>>
>> The last thing to know is that regular modules cannot sink events, but a
>> class can.  A regular
>> module cannot RAISE an event, but a class can.  Classes are modules, but
>> modules are not classes.
>>
>> This is just a teaser to see if anyone is interested.
>>
>> If yes continue lecture else end if.
>>
>> --
>> John W. Colby
>> www.ColbyConsulting.com
>> --
>> AccessD mailing list
>> AccessD at databaseadvisors.com
>> http://databaseadvisors.com/mailman/listinfo/accessd
>> Website: http://www.databaseadvisors.com
>>



More information about the AccessD mailing list