How getting eventhandler attached to an event?

C

Carlo \(mcp\)

Good morning

I have this lines:

AddHandler MyControl1.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl2.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl3.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl4.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl5.Parent.Paint, AddressOf PaintParentHandler

Is there a way for getting (at runtime) the list of eventhandlers attached
to an event? In my case, a reference to PaintParentHandler?

Since MyControl1, MyControl2, MyControl3, MyControl4 and MyControl5 are
inside the SAME parent, I need this in order to avoid multiple (useless)
calls to PaintParentHandler.

Thank you.

C.
 
D

Duane Phillips

Rather than go through all that, can you use a static or global variable to
lock out successive semi-concurrent attempts?

For example:

"
SUB EVENTHANDLER()
STATIC blnIsRunning as boolean
If blnIsRunning then Return
blnIsRunning = True
'remainder of code execution for this handler
blnIsRunning = False
END SUB
"
- or -

"
PUBLIC blnIsRunning as boolean 'a PRIVATE dimension may be more
appropriate...

SUB EVENTHANDLER()
If blnIsRunning then Return
blnIsRunning = True
'remainder of code execution for this handler
blnIsRunning = False
END SUB
"

Cheers!

~ Duane Phillips
 
C

Carlo \(mcp\)

Hi Duane
thank you for your suggestion. Unfortunately, it doen not applies to my
case. I don't need to avoid the concurrent execution of a procedure. I
simply need to have just one procedure attached to an event. What I need, in
other words, is a single call to AddHandler, if a handler is already set.
Thank you.
 
R

R. MacDonald

Hello, Carlo,

You might be able to get the information you need by iterating through
the collection returned by MyControln.Parent.GetType.GetEvents(). Look
for a case where the Name property of the matches "Paint".

Cheers,
Randy
 
L

Larry Lard

Carlo said:
Good morning

I have this lines:

AddHandler MyControl1.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl2.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl3.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl4.Parent.Paint, AddressOf PaintParentHandler
AddHandler MyControl5.Parent.Paint, AddressOf PaintParentHandler

Is there a way for getting (at runtime) the list of eventhandlers attached
to an event? In my case, a reference to PaintParentHandler?

No. The list of event subscribers is a proivate implementation detail
of the Control. It doens't have to tell you who is subscribed.
Since MyControl1, MyControl2, MyControl3, MyControl4 and MyControl5 are
inside the SAME parent, I need this in order to avoid multiple (useless)
calls to PaintParentHandler.

Rough method:

- keep a list of controls
- for each MyControl
- is MyControl.Parent in the list?
- if it is, then we are already hooked to its paint event, so
do nothing
- if it isn't, then hook to its Paint event, and add it to the
list
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top