C# 使DragEventArgs e.X和e.Y相对于窗体或图片框-而不是屏幕

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

在一个由DragDrop事件处理程序调用的方法中(因此我将DragEventArgs传递给它-我使用它来获取mouse.X和mouse.Y),它基于相对于计算机屏幕的e.位置。这不适用于我的应用程序。我有其他类似的方法,e.X和e.Y是相对于我的Picturebox,这是更好的。即使是相对于形式也可以。为什么这是相对于屏幕的,而其他的是相对于picturebox的?方法如下:

 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);