0

当我拖动一个图片框时,它同时拖动了我的两个。因为在 pbxMap_DragDrop 方法中,我必须调用两个在拖动时应该触发的方法。

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

塞特修斯:

public void setTheseus(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];

                Point RelativeMouseLoc = myMapController.myMap.myForm.pbxMap.PointToClient(Cursor.Position);

                if (RelativeMouseLoc.X > column &&
                    RelativeMouseLoc.X < column + myMapController.myMap.myCellSize
                    && RelativeMouseLoc.Y > row && RelativeMouseLoc.Y <
                    row + myMapController.myMap.myCellSize)
                {
                    myMapController.myMap.myCells[i].hasTheseus = true;
                }
                else
                {
                    myMapController.myMap.myCells[i].hasTheseus = false;
                }
            }
        }

SetMinotaur 大致相同,但将 hasTheseus 替换为 hasMinotaur。只要单元格“hasTheseus”或“hasMinotaur”,它就会被吸引到该单元格。

因此,当我拖动一个时,它会同时绘制它们,因为它们都在 pbxMap_DragDrop 中设置。

我认为我可以为 pbxMap_DragDrop 设置多个事件处理程序,具体取决于拖动的图片框。

4

1 回答 1

2

您可以检查sender参数以确定是要移动牛头怪还是忒修斯。它看起来像这样:

var pic = (PictureBox)sender;
if (pic.Name == "minotaur")
{
    myDetectMouse.setMinotaur(e, myMap.myCells);
}
else
{
    myDetectMouse.setTheseus(e, myMap.myCells);
}

如果您不想使用该Name属性,则可以使用该属性之类的其他东西Tag- 只需确保为每个PictureBox对象设置它即可。

于 2013-09-18T09:04:55.177 回答