有关如何通过单击两个新点创建一条线然后在它们之间画一条线的建议吗? 我正在尝试创建一个像adobe acrobat那样的距离工具。
图片示例
答案 0 :(得分:5)
解决了问题!
修改强> 这是代码:
private Point p1, p2;
List<Point> p1List = new List<Point>();
List<Point> p2List = new List<Point>();
private void Panel1_MouseDown(object sender, MouseEventArgs e)
{
if (p1.X == 0)
{
p1.X = e.X;
p1.Y = e.Y;
}
else
{
p2.X = e.X;
p2.Y = e.Y;
p1List.Add(p1);
p2List.Add(p2);
Invalidate();
p1.X = 0;
}
}
private void Panel1_Paint(object sender, PaintEventArgs e)
{
using(var p = new Pen(Color.Blue, 4))
{
for(int x = 0; x<p1List.Count; x++){
e.Graphics.DrawLine(p, p1List[x], p2List[x]);
}
}
}
答案 1 :(得分:2)
您可以在面板上处理鼠标单击事件(例如)并检索单击的位置(使用事件参数)。将此位置存储在属性中。根据需要为这么多点做到这一点。 在面板绘制事件中,调用父绘制,然后在点之间绘制线条。
答案 2 :(得分:2)
这样的事情应该这样做:
Point firstPoint;
Point seondPoint;
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if (this.firstPoint == null) {
this.firstPoint = e.Location;
}
if (this.secondPoint == null) {
this.secondPoint = e.Location;
}
panel1.Invalidate();
}
private void panel1_Paint_1(object sender, PaintEventArgs e)
{
Using (pn as new Pen(Color.Blue, 5))
{
e.Graphics.DrawLine(pn, firstPoint, secondPoint);
}
}
编辑:你也不需要CreateGraphics
来画线 - 在Paint事件中你已经有了一个图形对象。