C # TableLayoutPanel MouseLeave - PullRequest
       11

C # TableLayoutPanel MouseLeave

0 голосов
/ 15 февраля 2010

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

мне просто нужно логически объяснить это по-другому.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2010

Я нашел ответ здесь в этом предыдущем сообщении SO: Мышь движется слишком быстро, чтобы захватить события

0 голосов
/ 15 февраля 2010

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

...