Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何选择绘制的直线并将其删除?_C#_Winforms - Fatal编程技术网

C# 如何选择绘制的直线并将其删除?

C# 如何选择绘制的直线并将其删除?,c#,winforms,C#,Winforms,我用DrawLine和PaintEvent画了一条简单的线。 我想选择该行并将其从世界中删除!! 我想要指引和方向,我将如何选择和删除绘制的线 编辑: 我不需要代码。我需要一些指导和指引,就是这样。所以别再破坏我的名誉了:你不能选择它。只是像素而已。必须重新绘制绘制该线的整个区域,但现在不必在Paint事件处理程序中绘制该线。计算必须重绘的rect,并调用控件的Invalidate方法重绘此区域 简单的例子: using System; using System.Drawing; using S

我用DrawLine和PaintEvent画了一条简单的线。 我想选择该行并将其从世界中删除!! 我想要指引和方向,我将如何选择和删除绘制的线

编辑:
我不需要代码。我需要一些指导和指引,就是这样。所以别再破坏我的名誉了:

你不能选择它。只是像素而已。必须重新绘制绘制该线的整个区域,但现在不必在Paint事件处理程序中绘制该线。计算必须重绘的rect,并调用控件的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());
        }
    }
}

我不是一个C专家,但我可以在这里提出一些建议,首先,您需要通过使用一些集合(如数组)来跟踪绘制的所有线条。现在,在鼠标事件上,您需要检查轻触是否更接近您绘制的任何线条,基于此,您可以从集合中拾取线条并重新绘制/移动或擦除。我在iOS中也采用了同样的方法

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

->非常接近您的要求

希望这有帮助


-anoop

有没有类似的最简单的例子?我不需要代码。我需要一些指导和指引,就是这样。Hmmm?@AnumQazi,添加了示例