如何选择和删除已绘制的线条

本文关键字:绘制 删除 何选择 选择 | 更新日期: 2023-09-27 18:17:16

我已经用DrawLine和PaintEvent画了一条简单的线。我想选择这条线并将其从世界上删除!!我想要指导方针和方向,我将如何选择和删除绘制的线?

编辑:我不需要代码。我需要一些指导和指引,仅此而已。所以别再破坏我的名声了

如何选择和删除已绘制的线条

我不是c#专家,但我可以在这里提出一些建议,首先你需要通过使用一些集合(如array)来跟踪你绘制的所有线条。现在,在鼠标事件中,您需要检查点击是否更接近您绘制的任何线条,基于此,您可以从您的集合中选择线条并重新绘制/移动或擦除。我在iOS系统中也这么做过。

请查看以下链接中的更多信息

Graphic - DrawLine -绘制线并移动它->非常接近你所要求的。

如何绘制可选择的线?

如何在c#中使用鼠标绘制和移动形状

希望对您有所帮助

安普

不能选择。只是像素而已。您必须重新绘制绘制线的整个区域,但现在只是没有在Paint事件处理程序中绘制这条线。计算必须重新绘制的区域,并调用控件的Invalidate()方法来重新绘制该区域。

简单的例子:

using System;
using System.Drawing;
using System.Windows.Forms;
namespace TestPaintApp
{
    public class TestPaint : Form
    {
        private bool drawLine = false;
        private Point lineStart;
        private Point lineEnd;
        public TestPaint()
        {
            var drawLineButton = new Button();
            drawLineButton.Text = "Draw line";
            drawLineButton.Location = new Point(5, 5);
            drawLineButton.Click += DrawLineButton_Click;
            var dontDrawLineButton = new Button();
            dontDrawLineButton.Text = "Don't draw";
            dontDrawLineButton.Location = new Point(5, 30);
            dontDrawLineButton.Click += DontDrawLineButton_Click;
            GetLineRect();
            this.Controls.Add(drawLineButton);
            this.Controls.Add(dontDrawLineButton);
            this.MinimumSize = new Size(200, 200);
            this.Paint += Form_Paint;
            this.Resize += Control_Resize;
        }
        private Rectangle GetLineRect()
        {
            this.lineStart = new Point(75, 75);
            this.lineEnd = new Point(this.ClientSize.Width - 75, this.ClientSize.Height - 75);
            return new Rectangle(
                Math.Min(lineStart.X, lineEnd.X),
                Math.Min(lineStart.Y, lineEnd.Y),
                Math.Max(lineStart.X, lineEnd.X),
                Math.Max(lineStart.Y, lineEnd.Y)
                );
        }
        private void Form_Paint(object sender, PaintEventArgs e)
        {
            if (drawLine)
            {
                e.Graphics.DrawLine(Pens.Red, lineStart, lineEnd);
            }
        }
        private void Control_Resize(object sender, EventArgs e)
        {
            this.Invalidate(GetLineRect());
        }
        private void DrawLineButton_Click(object sender, EventArgs e)
        {
            drawLine = true;
            this.Invalidate(GetLineRect());
        }
        private void DontDrawLineButton_Click(object sender, EventArgs e)
        {
            drawLine = false;
            this.Invalidate(GetLineRect());
        }
    }
}