在由 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);
}