Странное расположение при перемещении WinForms picbox - PullRequest
0 голосов
/ 28 апреля 2010

Я не мог разобраться в проблеме, поэтому после отладки я наконец решил написать ниже.

Почему место прыгает вокруг ?! 147 86 до 294 212 затем обратно каждый обратный звонок?

pic.MouseMove += my_MouseMove;

my_MouseMove(object sender, MouseEventArgs e)

Console.WriteLine("{0} {1} {2} {3}", e.X, e.Y, e.Location.X, e.Location.Y);

147 86 147 86
294 212 294 212
147 86 147 86
294 212 294 212
147 86 147 86
294 212 294 212

    //This code expects e.X,Y to return the X,Y Relative to the parent control. 
    //It seems to be relative to mousedown which breaks this.
    Point heroClick = new Point();
    private void hero_MouseDown(object sender, MouseEventArgs e)
    {
        heroClick.X = e.X;
        heroClick.Y = e.Y;
    }
    private void hero_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button != System.Windows.Forms.MouseButtons.Left)
            return;
        var xDif = e.X - heroClick.X;
        var yDif = e.Y - heroClick.Y;
        heroClick.X += xDif;
        heroClick.Y += yDif;
        lvl.playerX += xDif;
        lvl.playerY += yDif;
        PictureBox pic = ((PictureBox)sender);
        pic.Left += xDif;
        pic.Top+= yDif;
        //Console.WriteLine("{0} {1} {2} {3}", e.X, e.Y, e.Location.X, e.Location.Y, sender);
        textBox2.Text = string.Format("{0} {1} {2} {3}", e.X, e.Y, e.Location.X, e.Location.Y, sender);
        textBox2.Update();
    }

1 Ответ

2 голосов
/ 28 апреля 2010

Приведенного кода совершенно недостаточно, чтобы угадать, что может происходить. Я возьму подсказку из темы темы «во время перемещения picBox». Если вы используете событие MouseMove для перемещения элемента управления, то вы изменяете положение элемента управления относительно мыши. Следующая сообщаемая позиция будет отличаться, даже если вы не двигали мышь. Так как положение мыши сообщается относительно верхнего левого угла клиентской области элемента управления.

Эффект, как правило, очень интересный, контроль делает пого, быстро прыгая взад и вперед. Вы должны компенсировать это, обычно , а не , обновляя сохраненную предыдущую позицию мыши. Я не могу дать лучший совет, чем этот, не видя никакого соответствующего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...