Groups | Blog | Home
all groups > c# > november 2006 >

c# : Obtaining control under mouse


Johnny Jensen
11/14/2006 11:51:07 PM
Hello Group

In the old days i'ev created a VB6 appl. that was able to obtain the
underlaying control under the mouse pointer. I would very much like to do
that in a C# application. I'll use VS2005 and .Net 2.0

I'll know of the solution to code each control for the mouse over event, but
I cant use that i this case.

Any one outthere with som examples?

Kind regards
Johnny Jensen

Michael C
11/15/2006 12:00:00 AM
[quoted text, click to view]

interate through the controls collection and attach the mousemove event for
every control and then use Control.GetChildAtPoint in the event to find the
control the mouse it over.

Michael

Ben Voigt
11/15/2006 4:22:03 PM

[quoted text, click to view]

You can do:

MouseMove += Form_MouseMove;
foreach (Control c in Controls)
c.MouseMove += Form_MouseMove;

then in
void Form_MouseMove(object sender, MouseEventArgs e)
sender is the control beneath the mouse (you can surely cast it to Control),
and e will contain the relative coordinates to the upper left of sender.

[quoted text, click to view]

Johnny Jensen
11/15/2006 10:10:54 PM
Hey Michael

Thanks for replying and it gave me some hint, but mabye i'am a bit slow
here.

Say that i'll have a label control on my form in the rectangle 20,20,120,36
on the forms mousemove event I read the x any y values to get the point, but
the secund i reach the label the forms mousemove no longer runs - now it is
the labels mousemove event that runs, and the reading of x,y will now be
wrong.

So that way i'll never get the Control.GetChildAtPoint to be anything else
but null. but if i'll in the forms mousemove event get the x,y and look at
x+1,y-1 ( or something like that ) i'll get the control when i'am almost
over the label.

Could you give me some more hints?

Kind regards
Johnny Jensen


[quoted text, click to view]

Michael C
11/20/2006 12:00:00 AM
[quoted text, click to view]

In addition to what Ben said, you should add label1.x and label1.y to your x
and y values.

Michael

AddThis Social Bookmark Button