[AccessD] Classes and Events

philippe pons phpons at gmail.com
Mon Feb 9 11:39:59 CST 2009


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