我有一个名为BGImage
的图片框。我希望当用户点击它时,我可以捕获相对于BGImage
的鼠标位置。
我尝试使用MousePosition
,但发现它只是在屏幕上显示鼠标位置,而不是在PictureBox上。
所以我也尝试使用PointToClient
:
Dim MousePos As Point = Me.PointToClient(MousePosition)
但是这给了我{X=1866,Y=55}
的位置,而我实际上点击了{X=516,Y=284}
左右的PictureBox。
我认为问题出现是因为我已经完全筛选了我的程序,并将PictureBox的位置设置在屏幕的中心(BGImage.Location = New Point((My.Computer.Screen.WorkingArea.Width / 2) - (1008 / 2), ((My.Computer.Screen.WorkingArea.Height / 2) - (567 / 2)))
)
我还应该提一下,PictureBox的大小是1008乘567像素,我的屏幕分辨率是1366乘768。
有什么方法可以让鼠标位置相对到BGImage的位置?
答案 0 :(得分:0)
将鼠标单击事件添加到图片框中 然后使用MouseEventArgs获取图片框内的鼠标位置 这将为您提供图片框内的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
答案 1 :(得分:0)
我遇到过同样的问题,并在一些朋友的帮助下解决了。 看看这里mouse position is not correct 这里的代码为您提供基于图片的鼠标的正确位置。 坦克到@Aaron他已经给出了这个问题的最终解决方案。
这会在您单击的确切位置放置一个红点。我想知道设置光标位置有多么有用,因为它们几乎肯定会在点击按钮后移动鼠标(无意或无意)。
设置光标位置需要在屏幕坐标中 - 这会转换回客户端坐标以进行绘图。我不相信PointToClient是光标位置所必需的。在下面的代码中,这是一个不必要的转换,因为您只需返回客户端坐标。我把它留下来显示每个转换的示例,以便您可以试验它们。
List.foldl(
list,
(1, map),
fn(l, (i, map)) -> (i+1, Map.update(map, :some_key, $(i)))
)
答案 2 :(得分:0)
代替使用:
Dim MousePos As Point = Me.PointToClient(MousePosition)
您应该使用:
Dim MousePos As Point = BGImage.PointToClient(MousePosition)
它将在BGImage坐标中为您提供鼠标位置,而第一个代码将在Form坐标中为您提供鼠标位置。