如何实现 pictureBox.MoveHover

本文关键字:pictureBox MoveHover 实现 何实现 | 更新日期: 2023-09-27 18:31:16

事件处理程序对我来说仍然有点新。我想调用此方法,如果鼠标悬停在 pictureBox 的某个部分上,它将锯齿状列表中的成员值从 0 更改为 1。

    public void onMouseUp(MouseEventArgs e, List<List<int>> walls, List<List<int>> positions)
    {
        for (int i = 0; i < walls.Count; i++)
        {
            int[] mapData = mapController.getMapData(i, walls, positions);
            int column = mapData[0];
            int row = mapData[1];
            int right = mapData[2];
            int bottom = mapData[3];
            if (e.X == column * mapController.map.squareSize)
            {
                mapController.map.cellWalls[i][0] = 1;
            }
        }
    }

该方法可能是错误的,但我只想先调用它,然后我可以测试它。它位于一个名为mapConstructor的类中。我有一个名为mapDesignerView的表单类,其中包含图片框。

为了称呼它,我从表单中尝试了这个:

private void pbxMap_MouseHover(object sender, System.EventArgs e)
{
    mapConstructor.onMouseUp(e, map.cellPositions, map.cellPositions);
}

它不会接受mouseEvntArgs参数,所以说无效的参数,因为我的方法需要mouseEventArgs。我也尝试了一些不同的事情,但希望听到解决方案,而不是告诉你我尝试过的所有错误的事情。

我想在鼠标悬停在图片框上时连续调用它,当它更改列表的值时,图片框将需要重新绘制自己。

谢谢。

如何实现 pictureBox.MoveHover

只需传递鼠标相对于PictureBoxX坐标..因为这是您在该方法中使用的唯一内容:

public void onMouseUp(int xPosition, List<List<int>> walls, List<List<int>> positions)
{
    for (int i = 0; i < walls.Count; i++)
    {
        int[] mapData = mapController.getMapData(i, walls, positions);
        int column = mapData[0];
        int row = mapData[1];
        int right = mapData[2];
        int bottom = mapData[3];
        if (xPosition == column * mapController.map.squareSize)
        {
            mapController.map.cellWalls[i][0] = 1;
        }
    }
}

然后这样称呼它:

private void pbxMap_MouseHover(object sender, System.EventArgs e)
{
    var xPosition = pbxMap.PointToClient(MousePosition).X;
    mapConstructor.onMouseUp(xPosition, map.cellPositions, map.cellPositions);
}