Как переместить PictureBox в C #? - PullRequest
4 голосов
/ 21 марта 2012

Я использовал этот код для перемещения графического блока в событии pictureBox_MouseMove

pictureBox.Location = new System.Drawing.Point(e.Location);

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

Ответы [ 3 ]

5 голосов
/ 21 марта 2012

Вы хотите переместить элемент управления на величину, на которую переместилась мышь:

    Point mousePos;

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
        mousePos = e.Location;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) {
            int dx = e.X - mousePos.X;
            int dy = e.Y - mousePos.Y;
            pictureBox1.Location = new Point(pictureBox1.Left + dx, pictureBox1.Top + dy);
        }
    }

Обратите внимание, что этот код не обновляет переменную mousePos в MouseMove. Необходимо, поскольку перемещение элемента управления изменяет относительное положение курсора мыши.

4 голосов
/ 21 марта 2012

Вы должны сделать несколько вещей

  1. Зарегистрировать начало операции перемещения в MouseDown и запомнить местоположение начала мыши.

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

  3. Зарегистрировать конец операции перемещения в MouseUp.

private bool _moving;
private Point _startLocation;

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    _moving = true;
    _startLocation = e.Location;
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    _moving = false;
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (_moving) {
        pictureBox1.Left += e.Location.X - _startLocation.X;
        pictureBox1.Top += e.Location.Y - _startLocation.Y;
    }
}
0 голосов
/ 21 марта 2012

Попробуйте изменить SizeMode свойство с AutoSize на Normal

...