0

こんにちは、私は戦艦クローン ゲームを開発しており、TableLayoutPanel の MouseLeave イベントに問題があります。

最初のMouseMove:

    private PictureBox HomeLastPicBox = new PictureBox();

    private TableLayoutPanelCellPosition homeLastPosition = new TableLayoutPanelCellPosition(0, 0);

    private void HomeTableLayoutPanel_MouseMove(object sender, MouseEventArgs e)
    {

        PictureBox NowPicControl = (PictureBox)(HomeTableLayoutPanel.GetChildAtPoint(e.Location));

        if ((NowPicControl != null) && (NowPicControl != HomeLastPicBox))
        {

            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(NowPicControl);

            if (GameModel.HomeCellStatus(homeCurrentPosition.Column, homeCurrentPosition.Row) == Cell.cellState.WATER)
            {
                NowPicControl.Image = Properties.Resources.scan;
            }
            homeLastPosition = homeCurrentPosition;
        }
    }

これは正しく機能しているようです。

現在、MouseLeave イベント:

     private void HomeTableLayoutPanel_MouseLeave(object sender, EventArgs e)
    {
        MessageBox.Show("col " + homeLastPosition.Column.ToString() + " row " + homeLastPosition.Row.ToString());
        if (GameModel.HomeCellStatus(homeLastPosition.Column, homeLastPosition.Row) == Cell.cellState.WATER)
        {
            HomeLastPicBox.Image = Properties.Resources.water;
            MessageBox.Show("hi");
        }
        HomeLastPicBox = new PictureBox();
    }

これは奇妙な動作です。コードを通過し、「HI」も表示されますが、PictureBox 画像は水に変更されません。理由についてのアイデアはありますか?これは常に発生するわけではなく、時々発生するだけです。

上記のコードが行っていることは、基本的に表のセルをスキャンすることであり、セルの内容が WATER の場合、表のセルの画像を SCAN に更新し、ユーザーが先に進むと、セルの画像を WATER に戻します。

これで十分な情報であることを願っています。さらに必要かどうか尋ねてください。

前もって感謝します。

ps これは、mouseover や mouseexit などの JavaScript を試みています。

私はいくつかの進歩を遂げました。MouseLeave の後、MouseMove が再度呼び出されるため、結果が発生しています。

私が思う別の方法でそれを論理化する必要があるだけです。

4

1 に答える 1