привет, я занимаюсь разработкой игры клонов линейных кораблей, и у меня возникла проблема с событием TableLayoutPanel MouseLeave.
первое движение мыши:
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 не меняется на воду. есть идеи, почему? это не происходит постоянно, только время от времени.
то, что делает приведенный выше код, в основном сканирует ячейки таблицы, и, если содержимое ячейки равно ВОДЕ, оно обновляет изображение ячейки таблицы до СКАНИРОВАНИЯ, и, когда пользователь перемещается вперед, оно переключает изображение ячейки обратно в ВОДУ.
надеюсь, это достаточно информации. пожалуйста, спросите, нужно ли больше.
Заранее спасибо.
p.s. это попытка JavaScript, как mouseover и mouseexit.
Я добился определенного прогресса. Оказывается, после MouseLeave, MouseMove вызывается снова, поэтому я получаю результат.
мне просто нужно логически объяснить это по-другому.