2017-02-22 31 views
0

Я использую pictureBox для перемещения 2 линейных ступеней; когда событие mouseDown запускается, координаты pictureBox переназначаются в соответствии с максимальной длиной перемещения оси и затем отправляются им для выполнения движения.обновление положения круга на картинкеBox

Чтобы улучшить эту функцию, я добавил маленькую точку на этом изображении, чтобы отслеживать текущую позицию мыши во время события mouseDown. точка должна обновлять свое положение каждый раз, когда движется мышь; для этого я использовал gfx.Clear (Color.White); чтобы удалить предыдущую и нарисовать новую. Проблема в том, что для правильного позиционирования оси pictureBox должен показывать фотографию оси; но вызов gfx.Clear (Цвет) очищает изображение и оставляет меня на белом фоне.

есть способ обновления позиции точек без вызова gfx.Clear (для того, чтобы сохранить изображение?)

if (e.Button.Equals(MouseButtons.Left)) 
      { 
       { 
        this.gridImage.Refresh(); 
        convertedX = (e.X * 100)/gridImage.Size.Width; 
        convertedY = (e.Y * 100)/gridImage.Size.Height; 
        using (Graphics gfx = Graphics.FromImage(this.gridImage.Image)) 
        { 
         circle_bounds.X = e.X; 
         circle_bounds.Y = e.Y; 
         gfx.Clear(Color.White); 

         gfx.DrawEllipse(Pens.Red, this.circle_bounds); 


        } 
        Console.WriteLine("(X,Y): " + convertedX.ToString() + " " + convertedY.ToString()); 
        Thread.Sleep(20); 
        //moveAbs(port1, "1", convertedX.ToString()); 
        //moveAbs(port2, "1", convertedY.ToString()); 
        initialXText.Text = convertedX.ToString(); 
        initialYText.Text = convertedY.ToString(); 

       } 
      } 
+0

Вы должны нарисовать круг на поверхности Pbox. Используйте 'using (Graphics gfx = gridImage.CreateGraphics)' для этого; бросьте Refresh() !. Результат не сохранится, но это не то, что вы хотите, не так ли? Для постоянного рисования используйте событие Paint и его объект e.Graphics и gridImage.Invalidate, чтобы вызвать Paint. - Вы уверены, что сон в MouseMove ??? Звучит ужасно странно! См. [Здесь] (http://stackoverflow.com/questions/38414334/how-to-draw-an-updating-line/38419518?s=24|0.0642#38419518) для примера строки обновления! – TaW

+0

работал как шарм! благодаря! –

+0

Обратите внимание: 'Графика gfx = gridImage.CreateGraphics()' обычно является серьезной ошибкой, так как данные не являются __not persistent__, то есть исчезают, например. после минимизации формы. Использование здесь здесь редкое __exception__ к правилам! – TaW

ответ

0

Что я хотел бы сделать это с помощью PictureBox.Paint события, чтобы нарисовать точку, которая должна следуйте движению мыши. Сначала я объявляю Point сохранить позицию мыши в любое время она движется:

Point mousePosition; 

Затем в обработчике PictureBox.MouseMove событий, я бы сохранить это место и аннулированию PictureBox:

private void gridImage_MouseMove(object sender, MouseEventArgs e) 
{ 
    mousePosition = e.Location; 
    pictureBox1.Invalidate(); 
} 

Наконец, в PictureBox.Paint я просто нарисовать круг, используя положение мыши:

private void gridImage_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.DrawEllipse(Pens.Red, new Rectangle(mousePosition, new Size(5,5))); 
} 

Надеется, что это приводит вас в правое направление

 Смежные вопросы

  • Нет связанных вопросов^_^