Mouse moves too fast to capture events

后端 未结 2 1773
一生所求
一生所求 2021-01-23 10:25

this is related to: a previous question

BUT the question is my code only fails when i move the mouse really really fast over and around the TableLayoutPanel.

is

2条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-23 10:59

    i solved the issue. it was a matter of reordering the logic flow.

    the solution spans 3 mouse events MouseEnter, MouseMove, MouseLeave.

        private PictureBox HomeLastPicBox = null;
    
        private TableLayoutPanelCellPosition HomeLastPosition = new TableLayoutPanelCellPosition(0, 0);
    
        private void HomeTableLayoutPanel_MouseMove(object sender, MouseEventArgs e)
        {
            PictureBox HomeCurrentPicBox = (PictureBox)(HomeTableLayoutPanel.GetChildAtPoint(e.Location));
    
            if ((HomeCurrentPicBox != HomeLastPicBox) && (HomeCurrentPicBox != null))
            {
    
                HomeLastPicBox = (PictureBox)HomeTableLayoutPanel.GetControlFromPosition(HomeLastPosition.Column, HomeLastPosition.Row);
    
                if (GameModel.HomeCellStatus(HomeLastPosition.Column, HomeLastPosition.Row) == Cell.cellState.WATER)
                {
                    HomeLastPicBox.Image = Properties.Resources.water;
    
                }
    
                TableLayoutPanelCellPosition HomeCurrentPosition = HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox);
    
                if (GameModel.HomeCellStatus(HomeCurrentPosition.Column, HomeCurrentPosition.Row) == Cell.cellState.WATER)
                {
                    HomeCurrentPicBox.Image = Properties.Resources.scan;
    
                    HomeLastPosition = HomeCurrentPosition;
                }
    
                gameFormToolTip.SetToolTip(HomeTableLayoutPanel, GameModel.alphaCoords(HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox).Column) + "," + HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox).Row);
            }
        }
    
        private void HomeTableLayoutPanel_MouseEnter(object sender, EventArgs e)
        {
            Point p = HomeTableLayoutPanel.PointToClient(Control.MousePosition);
            PictureBox HomeCurrentPicBox = (PictureBox)(HomeTableLayoutPanel.GetChildAtPoint(p));
    
            if (HomeCurrentPicBox != null)
            {
                TableLayoutPanelCellPosition HomeCurrentPosition = HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox);
    
                if (GameModel.HomeCellStatus(HomeCurrentPosition.Column, HomeCurrentPosition.Row) == Cell.cellState.WATER)
                {
                    HomeCurrentPicBox.Image = Properties.Resources.scan;
                }
    
                gameFormToolTip.SetToolTip(HomeTableLayoutPanel, GameModel.alphaCoords(HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox).Column) + "," + HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox).Row);
            }
        }
    
        private void HomeTableLayoutPanel_MouseLeave(object sender, EventArgs e)
        {
            if (GameModel.HomeCellStatus(HomeLastPosition.Column, HomeLastPosition.Row) == Cell.cellState.WATER)
            {
                HomeLastPicBox = (PictureBox)HomeTableLayoutPanel.GetControlFromPosition(HomeLastPosition.Column, HomeLastPosition.Row);
    
                HomeLastPicBox.Image = Properties.Resources.water;
    
                gameFormToolTip.SetToolTip(HomeTableLayoutPanel, GameModel.alphaCoords(HomeTableLayoutPanel.GetCellPosition(HomeLastPicBox).Column) + "," + HomeTableLayoutPanel.GetCellPosition(HomeLastPicBox).Row);
            }
        }
    

    i thought i would post the solution for future knowledge seekers.

    thanks.

提交回复
热议问题