winforms to drag picturebox

anton7805

Среда vs 2005 ,разбираюсь с winforms. Мне нужно иметь возможность перемещать picturebox по
панели при нажатой левой кнопке мыши.Что я делаю-
1.при onMouseDown запоминаю положение мыши
2. onMouseMove - просто перерисовываю picturebox с новыми координатами
3. Завершаю операцию.
Но уж очень убого получается...если мышь дергать быстро , то контрол не успевает перерисовываться.
Свойства enabledrag у picturebox'а оказывается нет ,также как и события ondrag....
Как можно по другому реализовать это дело?

Helga87

Делаю так (см. ):
 
private int lastDownX;
private int lastDownY;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    lastDownX = e.X;
    lastDownY = e.Y;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
     this.pictureBox1.Left += (e.X - lastDownX);
     this.pictureBox1.Top += (e.Y - lastDownY);
    }
}
На моей машине все выглядит пристойно.

anton7805

сэнкс) у меня тоже заработало
раньше вместо :
this.pictureBox1.Left += (e.X - lastDownX);
this.pictureBox1.Top += (e.Y - lastDownY);

я юзал
this.pictureBox1.Location.X += (e.X - lastDownX);
this.pictureBox1.Location.Y += (e.Y - lastDownY);

и нифигова тормозило. Теперь ок!

Helga87

Хм, у меня такой код:
this.pictureBox1.Location.X += (e.X - lastDownX);
this.pictureBox1.Location.Y += (e.Y - lastDownY);

даже не компилируется. А такой:
this.pictureBox1.Location = new Point(
this.pictureBox1.Left + e.X - lastDownX,
this.pictureBox1.Top + e.Y - lastDownY);

работает отлично.

anton7805

м-да, там у меня чуть по другому было.. но это уже не важно
Оставить комментарий
Имя или ник:
Комментарий: