如何绘制可选线?

我想创建一个用户能够操纵他绘制的线的应用程序。 删除行或选择它。 我该怎么做?

提前致谢


我设法使用硬编码矩形。 但我仍然不知道如何使用drawLine()我可以使用drawPath进行命中测试吗?

这是代码:

 private bool selectGraph = false; private Rectangle myrec = new Rectangle(50, 50, 100, 100); private Graphics g; private void panel1_Paint(object sender, PaintEventArgs e) { SolidBrush sb = new SolidBrush(Color.Blue); Pen p = new Pen(Color.Blue, 5); e.Graphics.DrawRectangle(p, myrec); e.Graphics.FillRectangle(sb, myrec); } private void panel1_MouseUp(object sender, MouseEventArgs e) { Point mPT = new Point(eX, eY); if (e.Button == MouseButtons.Left) { if (myrec.Contains(mPT)) { selectGraph = true; button1.Enabled = true; } else { selectGraph = false; button1.Enabled = false; } } Invalidate(); } 

那么你可以从简单的Line类开始:

 public class Line { public Point Start { get; set; } public Point End { get; set; } } 

然后你可以得到你的表格:

 private Line Line = new Line(); protected override void OnPaint(PaintEventArgs e) { e.Graphics.DrawLine(Pens.Red, this.Line.Start, this.Line.End); } protected override void OnMouseMove(MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.Line.Start = e.Location; this.Refresh(); } else if (e.Button == MouseButtons.Right) { this.Line.End = e.Location; this.Refresh(); } } 

所以基本上他们可以删除this.Line可能在“MiddleButton”点击或其他东西。 这应该足以让你入门。

我已经创建了一个示例 ,说明了如何做到这一点。 设置一些断点,看看事情是如何完成的。

对此没有简单的一线解决方案。 你必须自己编程。

您必须跟踪您绘制的每个对象。 在onmousedown事件中,您必须通过比较坐标来确定鼠标是否已在要移动/删除的对象上或附近单击。 然后你需要绘制一些视觉指南,该线被“选中”。 通过从集合中删除对象,现在可以非常轻松地删除。

对于拖放操作,您必须通过根据鼠标移动更改对象的坐标来执行类似操作。