Vb.net 查找鼠标相对于控件而不是屏幕的位置
我有一个名为Vb.net 查找鼠标相对于控件而不是屏幕的位置,vb.net,winforms,screen-resolution,windows-controls,Vb.net,Winforms,Screen Resolution,Windows Controls,我有一个名为BGImage的图片框。我希望当用户单击此按钮时,我可以捕获鼠标相对于BGImage的位置 我试过使用MousePosition,结果发现它在屏幕上给出了鼠标位置,而不是在PictureBox上 因此,我还尝试使用指向客户端: Dim MousePos As Point = Me.PointToClient(MousePosition) 但这给了我位置{X=1866,Y=55},而我实际上是在{X=516,Y=284}左右点击了图片框 我认为出现问题的原因是,我已完全屏蔽了我的程序
BGImage
的图片框。我希望当用户单击此按钮时,我可以捕获鼠标相对于BGImage
的位置
我试过使用MousePosition
,结果发现它在屏幕上给出了鼠标位置,而不是在PictureBox上
因此,我还尝试使用指向客户端:
Dim MousePos As Point = Me.PointToClient(MousePosition)
但这给了我位置{X=1866,Y=55}
,而我实际上是在{X=516,Y=284}
左右点击了图片框
我认为出现问题的原因是,我已完全屏蔽了我的程序,并将PictureBox的位置设置为屏幕中心(BGImage.Location=新点((my.Computer.screen.WorkingArea.Width/2)-(1008/2),((my.Computer.screen.WorkingArea.Height/2)-(567/2))
)
我还应该提到PictureBox的大小是1008×567像素,我的屏幕分辨率是1366×768
是否有任何方法可以获取相对于BGImage位置的鼠标位置?将鼠标单击事件添加到图片框
然后使用鼠标eventargs获取图片框内的鼠标位置。
这将为您提供图片框内的X和Y位置
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
我以前也遇到过同样的问题,只是在一些朋友的帮助下解决了。
看看这里
下面是根据图片为您提供鼠标正确位置的代码。
坦克给@Aaron,他已经给出了这个问题的最终解决方案
这将在您单击的确切点上放置一个红点。我想知道设置光标位置有多有用,因为他们几乎肯定会在点击按钮后移动鼠标(不管是否无意)
设置光标位置需要在屏幕坐标中-这将转换回绘图的客户坐标。我认为指针客户端对于光标位置不是必需的。在下面的代码中,这是一个不必要的转换,因为您只需返回到客户机坐标。我留下它是为了展示每个转换的示例,以便您可以对它们进行实验
Public Class Form1
Private PPoint As Point
Public Sub New()
' This call is required by the designer.
InitializeComponent()
PictureBox1.BackColor = Color.White
PictureBox1.BorderStyle = BorderStyle.Fixed3D
AddHandler PictureBox1.MouseClick, AddressOf PictureBox1_MouseClick
AddHandler Button8.Click, AddressOf Button8_Click
' Add any initialization after the InitializeComponent() call.
End Sub
Private Sub Button8_Click(sender As Object, e As EventArgs)
Dim g As Graphics = PictureBox1.CreateGraphics()
Dim rect As New Rectangle(PictureBox1.PointToClient(PPoint), New Size(1, 1))
g.DrawRectangle(Pens.Red, rect)
End Sub
Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs)
PPoint = PictureBox1.PointToScreen(New Point(e.X, e.Y))
Label8.Text = PPoint.X.ToString()
Label9.Text = PPoint.Y.ToString()
End Sub
End Class
而不是使用:
Dim MousePos As Point = Me.PointToClient(MousePosition)
您应该使用:
Dim MousePos As Point = BGImage.PointToClient(MousePosition)
它将在BGImage坐标中为您提供鼠标位置,而第一个代码将在窗体坐标中为您提供鼠标位置。我以前确实尝试过这一个,但它不正确链接上的一个正确,我已经准备好尝试了