我有一个CAD应用程序。我有班级。
STUFF()
我有一个名为Lines的列表。 线条在面板上绘制
public class Line
{
public float width { get; set; }
public bool selected { get; set; }
public Color color { get; set; }
public Point Start { get; set; }
public Point End { get; set; }
public Line(Color col, float w, Point s, Point e)
{
color = col;
Start = s;
End = e;
width = w;
}
public void Draw(Graphics G)
{
using (Pen pen = new Pen(color, width))
{
G.DrawLine(pen, Start, End);
}
}
这里mousePoint是Point(mouseposition.X,mouseposition.Y-158)。 158是因为我的面板位于窗口顶部下方158°。 然后我有一个mouseUp事件
private void panel1_Paint(object sender, PaintEventArgs e) { Graphics grp = e.Graphics; foreach (Line L in Lines.Except(DelLines)) { L.Draw(grp); } if (mouseisdown && Line == true) { grp.DrawLine(Pens.White, DsP1, new Point(MousePosition.X, MousePosition.Y - 158)); // double d = Math.Abs((DsP1.X - MousePosition.X) + (DsP1.Y - (MousePosition.Y - 158))); if (snapON == true) { grp.DrawLine(Pens.Yellow, snapPoint, mousePoint); } }
现在我想在鼠标移动时绘制一条线,它将告诉鼠标位置它的x轴或y轴与线列表中的一条线的点匹配。我尝试的是:
Panel1_MouseMove事件中的
private void panel1_MouseUp(object sender, MouseEventArgs e) { mouseisdown = false; if (Line == true) { PointsList.Add(new Point(e.X, e.Y)); Lines.Add(new PolygonArea.Line(Color.White, 1, DsP1, new Point(MousePosition.X, MousePosition.Y - 158))); Line = false; } }
只是为了测试,我引用行[0]中的第一行。但是当条件满足时,我无法在mousepointer和line的点之间画出一条线。 有什么想法??
答案 0 :(得分:0)
我解决了这个问题。只需在Paint Event中绘制线条后添加SnapON = false。我必须从mouse_move事件中删除panel1.invalidate ... 谢谢你们