首页 > 解决方案 > 如何通过在 C# 中拖动其主体来移动绘制的图形?

问题描述

我目前正在制作一个程序来通过坐标绘制线条,并且可以编辑或移动线条。现在如果要移动或编辑线,光标位置将是新的 A 或 B 点。所以只能通过拖动边缘来移动线条。有什么方法可以让身体拖动它吗?

对于我正在使用的线路

Graphics g = e.Graphics;
Pen pen1 = new Pen(Color.Black, 3);
g.DrawLine(pen1, line1X1, line1Y1, line1X2, line1Y2);
pen1.Dispose();

对于mousemove事件中的边缘计算,我现在正在使用

int oldX1 = line1X1; //Saving old coordinates for calculation
int oldY1 = line1Y1;
int oldX2 = line1X2;
int oldY2 = line1Y2;
int newX1 = e.Location.X; //New coordinates for calculation
int newY1 = e.Location.Y;
int difX = newX1 - oldX1; //Calculate the difference between old & new coordinates
int difY = newY1 - oldY1;
line1X1 = e.Location.X; //Move point 1 coordinates to new one
line1Y1 = e.Location.Y;
line1X2 = oldX2 + difX; //Move point 2 coordinates to old point 2 + difference
line1Y2 = oldY2 + difY;
x1Box.Text = line1X1.ToString();
y1Box.Text = line1Y1.ToString();
x2Box.Text = line1X2.ToString();
y2Box.Text = line1Y2.ToString();

试图在 mousemove 事件中进行第二次计算,以便单击并拖动屏幕上的任意位置以移动,但它根本不移动。如果稍微改变计算,它会移动,但会奇怪地摇晃到光标的两侧,例如光标的顶部和底部具有相同的距离或左右,并在移动光标时不断交换位置。

int clickPointX = e.Location.X;
int clickPointY = e.Location.Y;
int oldX1 = line1X1;
int oldY1 = line1Y1;
int difX = clickPointX - oldX1;
int difY = clickPointY - oldY1;
int dif1to2X = line1X2 - oldX1;
int dif1to2Y = line1Y2 - oldY1;
line1X1 = clickPointX - difX;
line1Y1 = clickPointY - difY;
line1X2 = line1X1 + dif1to2X;
line1Y2 = line1Y1 + dif1to2Y;
x1Box.Text = line1X1.ToString();
y1Box.Text = line1Y1.ToString();
x2Box.Text = line1X2.ToString();
y2Box.Text = line1Y2.ToString();

应用图像

在此处输入图像描述

问题是。

  1. 任何人都知道如何通过单击和拖动主体而不是边缘来移动线条?

  2. 任何人都知道我的第二次计算有什么问题,通过单击并拖动到任何地方来移动线?

非常感谢

标签: c#graphicspicturebox

解决方案


推荐阅读