我想创建一个用户能够操纵他绘制的线的应用程序。删除行或选择它。我该怎么做?
提前致谢
我设法使用硬编码矩形。但我仍然不知道如何使用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(e.X, e.Y);
if (e.Button == MouseButtons.Left)
{
if (myrec.Contains(mPT))
{
selectGraph = true;
button1.Enabled = true;
}
else
{
selectGraph = false;
button1.Enabled = false;
}
}
Invalidate();
}
答案 0 :(得分:2)
你可以从简单的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();
}
}
所以基本上他们可以在“MiddleButton”点击或其他东西上删除this.Line
。这应该足以让你入门。
我created a sample显示了如何做到这一点。设置一些断点,看看事情是如何完成的。
答案 1 :(得分:0)
对此没有简单的一线解决方案。你必须自己编程。
您必须跟踪您绘制的每个对象。在onmousedown事件中,您必须通过比较坐标来确定鼠标是否已在要移动/删除的对象上或附近单击。然后你需要绘制一些视觉指南,该线被“选中”。通过从集合中删除对象,删除现在非常简单。
对于拖放操作,你必须通过根据鼠标移动改变对象的坐标来做类似的事情。