Find the name of the label within its _Click() ?

M

mdupris

This is one of those "there's gotta be a way" situations. I have a
UserForm with objects all over it, including a multipage form, frames
within the pages and objects, including labels, within the forms and on
the pages directly. I'd like to implement a "right click for help"
routine for all the objects including labels, since some of the labels
are designed to look and feel like hyperlinks and do perform (hopefully
useful) actions for the user. The "HelpContextID" for all objects,
including labels, has been defined.

One obvious place to start is the "MouseUp()" event and use "If Button
= 2 ...". However, from there I'm stuck. With labels, the ActiveControl
object (or in my case, the
(Me.mpgMain.SelectedItem.ActiveControl.ActiveControl) object is NOT the
object whose "MouseUp()" macro is being run. Rather it's the textbox
where the cursor is sitting there blinking. Does anyone know a way to
refer to the object whose MouseUp event is being called from within the
MouseUp event itself? From there I could extract the HelpContextID
property and do a 'Shell "winhlp32.exe -N ...'

Alternately does anyone know a simpler way of having a right mouse
click bring up the context-sensitive help, equivalent to how the "F1"
key works, for all types of objects oon a UserForm? It seems this used
to a standard feature in older versions of Excel/Windows but, sigh, no
longer.

= Marchand =
 
J

Jim Cone

Most (all) of the controls you can put on a form have a mouse up/down
event. Assign your code to each individual control.
An alternative is to add a listbox with all of the help topics and let your
users pick the one they want to read.
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware


<[email protected]>
wrote in message
This is one of those "there's gotta be a way" situations. I have a
UserForm with objects all over it, including a multipage form, frames
within the pages and objects, including labels, within the forms and on
the pages directly. I'd like to implement a "right click for help"
routine for all the objects including labels, since some of the labels
are designed to look and feel like hyperlinks and do perform (hopefully
useful) actions for the user. The "HelpContextID" for all objects,
including labels, has been defined.

One obvious place to start is the "MouseUp()" event and use "If Button
= 2 ...". However, from there I'm stuck. With labels, the ActiveControl
object (or in my case, the
(Me.mpgMain.SelectedItem.ActiveControl.ActiveControl) object is NOT the
object whose "MouseUp()" macro is being run. Rather it's the textbox
where the cursor is sitting there blinking. Does anyone know a way to
refer to the object whose MouseUp event is being called from within the
MouseUp event itself? From there I could extract the HelpContextID
property and do a 'Shell "winhlp32.exe -N ...'

Alternately does anyone know a simpler way of having a right mouse
click bring up the context-sensitive help, equivalent to how the "F1"
key works, for all types of objects oon a UserForm? It seems this used
to a standard feature in older versions of Excel/Windows but, sigh, no
longer.

= Marchand =
 
N

NickHK

Not exactly what you want, but text box can be made to look like labels.
Also with .Locked=true they can be edited, but can be selected, hence made
active.

NickHK
 
M

mdupris

Jim,

Thanks for your reply here. Each item already has a code assigned to
it including responding to the MouseUp event. What I'm stumbling over
is the apparent inability for the VBA code behind a label object to
identify which object it belongs to so that it can look up other
properties of itself (in this case, ContextHelpID). I'm trying to have
a single place where the ContextHelpID is stored and the property of
the label object is the obvious place to do this. I could also
hard-wire it into the VBA code, but this is error-prone and a risk for
long-term maintenance of the application.
Ths list-box idea I've also considered, but it puts a lot of burden
on the user. They would reasonably expect the computer to "know" what
they're asking help about and not have to tell it "The object I just
clicked on!". Under this approach I'd also have to create, and
maintain, a duplicate index to an help file. This is a hassle initially
and a major maintenace headache down the road as the application
evolves. Simply getting the VBA code to read other properties of the
object it belongs to would be so much simpler for design and
maintenance, as well as being easier for the user.
But then, I'm always been an optimist.
 
M

mdupris

Nick,

You're right about this being a solution -- although it's more than
a bit of a kludge. It would really change the whole GUI design of the
application but it may be the way to go (sigh). Thanks for your
thoughts here.
 
J

Jim Cone

Environment...
Label control named "SizeLabel" added to a UserForm.
SizeLabel.Tag is 10
Right clicking the label displays the contents of Range("A10") on Sheet2.
Also displayed is the name of the label...

Private Sub SizeLabel_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then
MsgBox Worksheets("Sheet2").Range("A1")(CLng(SizeLabel.Tag), 1).Value
MsgBox Me.Controls("SizeLabel").Name
End If
End Sub
--
Jim Cone
San Francisco, USA
http://www.officeletter.com/blink/specialsort.html



Jim,

Thanks for your reply here. Each item already has a code assigned to
it including responding to the MouseUp event. What I'm stumbling over
is the apparent inability for the VBA code behind a label object to
identify which object it belongs to so that it can look up other
properties of itself (in this case, ContextHelpID). I'm trying to have
a single place where the ContextHelpID is stored and the property of
the label object is the obvious place to do this. I could also
hard-wire it into the VBA code, but this is error-prone and a risk for
long-term maintenance of the application.
Ths list-box idea I've also considered, but it puts a lot of burden
on the user. They would reasonably expect the computer to "know" what
they're asking help about and not have to tell it "The object I just
clicked on!". Under this approach I'd also have to create, and
maintain, a duplicate index to an help file. This is a hassle initially
and a major maintenace headache down the road as the application
evolves. Simply getting the VBA code to read other properties of the
object it belongs to would be so much simpler for design and
maintenance, as well as being easier for the user.
But then, I'm always been an optimist.
 
M

mdupris

Jim,
Good code -- thanks. It could also be revised to lookup the
ContextHelpID stored in matrix on a spreadsheet and use that # to
display a particular page within a help file. This would give users
access to the full help file contents in case they needed more than the
page in question. In another Excel application, I do this sort of thing
to give users a "right click" help on rows within a spreadsheet.
Still and all, "wouldn't it be nice" if the VBA of an object
could read the properties of its own object. Maybe in the next version
of Office...

= Marchand =
 

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