1

在由 DragDrop 事件处理程序调用的方法中(所以我将它传递给 DragEventArgs - 我用它来获取 mouse.X 和 mouse.Y),它基于相对于计算机屏幕的 e.Location。这不适用于我的应用程序。我还有其他类似的方法,eX和eY是相对于我的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();
            }
        }

它在这里被调用:

private void pbxMap_DragDrop(object sender, DragEventArgs e)
{
    myDetectMouse.setMinotaur(e, myMap.myCells);
}
4

1 回答 1

2

只需使用指向客户端:

PointToClient(new Point(x,y));

这是一个例子:

Point RelativeMouseLoc = PointToClient(Cursor.Position);
于 2013-09-18T07:14:23.917 回答