c# - 如何通过在 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();
应用图像
问题是。
任何人都知道如何通过单击和拖动主体而不是边缘来移动线条?
任何人都知道我的第二次计算有什么问题,通过单击并拖动到任何地方来移动线?
非常感谢
解决方案
推荐阅读
- python - 将并行 slurm 作业与具有多个节点的 mpirun 结合使用
- c# - 二进制文字的 XML 序列化
- sql - 加速访问 2016 查询
- sql - SQL 查询 to_char BETWEEN 返回错误结果和正确结果
- wordpress - 如何将函数代码设为简码?
- python - python中的时间和功能
- bash - 如何使用 ffmpeg 和 shaka-packager 优化编码和打包视频
- javascript - 在 JavaScript 中重做异步函数的最佳方法是什么?
- sitecore - 如果 useDisplayName 为真,是否可以通过显示名称和项目名称访问项目?
- javascript - 为什么 javascript 全局变量在此示例中不起作用?