С# TableLayoutPanel MouseLeave

Привет, я разрабатываю игру-клон линкоров, и у меня проблема с событием 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 не меняется на воду. есть идеи почему? это происходит не постоянно, только время от времени.

то, что делает приведенный выше код, в основном сканирует ячейки таблицы, и если содержимое ячейки - ВОДА, то он обновляет изображение ячейки таблицы до СКАНИРОВАНИЯ, и по мере продвижения пользователя он переключает изображение ячейки обратно на ВОДА.

надеюсь, что этой информации достаточно. пожалуйста, спросите, нужно ли больше.

заранее спасибо.

p.s. это попытка javascript, такого как mouseover и mouseexit.

я добился некоторого прогресса. получается, что после MouseLeave снова вызывается MouseMove, поэтому результат я испытываю.

просто нужно логически это по-другому, я думаю.


person iTEgg    schedule 15.02.2010    source источник


Ответы (1)


В вашем коде для MouseLeave предполагается, что HomeLastPicBox уже установлен в соответствующее поле изображения ячейки. Возможно ли, что HomeLastPicBox обновляется чем-то другим? Я бы посоветовал убедиться, что переменная установлена ​​​​правильно, прежде чем присваивать что-то ее изображению.

person Jim Mischel    schedule 15.02.2010