C# 使DragEventArgs e.X和e.Y相对于窗体或图片框-而不是屏幕
在一个由DragDrop事件处理程序调用的方法中(因此我将DragEventArgs传递给它-我使用它来获取mouse.X和mouse.Y),它基于相对于计算机屏幕的e.位置。这不适用于我的应用程序。我有其他类似的方法,e.X和e.Y是相对于我的Picturebox,这是更好的。即使是相对于形式也可以。为什么这是相对于屏幕的,而其他的是相对于picturebox的?方法如下:C# 使DragEventArgs e.X和e.Y相对于窗体或图片框-而不是屏幕,c#,location,mouse,C#,Location,Mouse,在一个由DragDrop事件处理程序调用的方法中(因此我将DragEventArgs传递给它-我使用它来获取mouse.X和mouse.Y),它基于相对于计算机屏幕的e.位置。这不适用于我的应用程序。我有其他类似的方法,e.X和e.Y是相对于我的Picturebox,这是更好的。即使是相对于形式也可以。为什么这是相对于屏幕的,而其他的是相对于picturebox的?方法如下: public void setMinotaur(DragEventArgs e, List<Cell> c
public void setMinotaur(DragEventArgs e, List<Cell> cells)
{
for (int i = 0; i < cells.Count; i++)
{
int[] mapData = myMapController.getMapData(i, cells);
int column = mapData[0];
int row = mapData[1];
int right = mapData[2];
int bottom = mapData[3];
// int column = myMap.boardXPos + myMap.myCells[i].myColumn * myMap.myCellSize;
// int row = myMap.boardYPos + myMap.myCells[i].myRow * myMap.myCellSize;
int pbxLocationX = myMapController.myMap.myForm.pbxMap.Location.X;
int pbxLocationY = myMapController.myMap.myForm.pbxMap.Location.Y;
int pnlLocationX = myMapController.myMap.myForm.panel2.Location.X;
int pnlLocationY = myMapController.myMap.myForm.panel2.Location.Y;
int offsetX = pbxLocationX + pnlLocationX;
myMapController.myMap.myForm.label1.Text = offsetX.ToString();
myMapController.myMap.myForm.label2.Text = e.X.ToString();
int offsetY = pbxLocationY + pnlLocationY;
if (e.X > column + offsetX &&
e.X < column + myMapController.myMap.myCellSize + offsetX)
{
myMapController.myMap.myCells[i].hasMinotaur = true;
}
else
{
myMapController.myMap.myCells[i].hasMinotaur = false;
}
myMapController.myMap.myForm.label2.Text = e.X.ToString();
}
}
只需使用点对客户端:
PointToClient(new Point(x,y));
以下是一个例子:
Point RelativeMouseLoc = PointToClient(Cursor.Position);
在您的示例中,在指向客户端之前添加picturebox?pbx.PointToClient?我不确定,因为我真的不知道您想要实现什么。PointToClient只是将屏幕
点
转换为相对点
谢谢。效果很好。
Point RelativeMouseLoc = PointToClient(Cursor.Position);