こんにちは、私は戦艦クローン ゲームを開発しており、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 が再度呼び出されるため、結果が発生しています。
私が思う別の方法でそれを論理化する必要があるだけです。