Find position of mouse relative to control, rather than screen

08robertsj picture 08robertsj · Feb 15, 2015 · Viewed 14.7k times · Source

I have a Picture Box called BGImage. I hope that when the user clicks on this I can capture the position of the mouse relative to BGImage.

I've tried using MousePosition, only to find it gives the mouse location on the screen, not on the PictureBox.

So I also tried using PointToClient:

Dim MousePos As Point = Me.PointToClient(MousePosition)

But this gives me the location {X=1866,Y=55} whereas I actually clicked on the PictureBox at around {X=516,Y=284}.

I think the problem arises because I have full-screened my program and set the position of the PictureBox to be at the centre of the screen (BGImage.Location = New Point((My.Computer.Screen.WorkingArea.Width / 2) - (1008 / 2), ((My.Computer.Screen.WorkingArea.Height / 2) - (567 / 2))))

I should also mention that the size of the PictureBox is 1008 By 567 pixels and my screen resolution is 1366 by 768.

Is there any way I can get the mouse position relative to BGImage's position?

Answer

Creator picture Creator · Feb 16, 2015

Add a mouse click event to your picture box
Then use the MouseEventArgs to get the mouse position inside the picture box.
This will give you the X and the Y location inside the picture box.

Dim PPoint As Point
Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick
    PPoint = New Point(e.X, e.Y)
    MsgBox(Convert.ToString(PPoint))
End Sub