C# 选择画好的其中一根线并删除的问题!帮顶给分!谢谢!

时间:2022-05-07 19:50:02
C# winform中用DrawLine画了好几条线,怎么选取画好的其中一根线然后按del键删除它,谢谢

21 个解决方案

#1


最好给点代码 谢谢大虾

#2


不太明白你这啥意思,但是帮忙顶了

#3


给画好的每根线做个标记。

#4


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication11
{
    class Line
    {
        public Point P1, P2;
        public Color Color;

        public Line(Point P1, Point P2, Color Color)
        {
            this.P1 = P1;
            this.P2 = P2;
            this.Color = Color;
        }
    }

    public partial class Form1 : Form
    {
        Bitmap OrgBmp = new Bitmap(500, 500);
        List<Line> Lines = new List<Line>();
        PictureBox PB = new PictureBox();
        Line SelectedLine = null;

        public Form1()
        {
            InitializeComponent();

            this.Controls.Clear();
            this.AutoSize = true;
            this.KeyPreview = true;
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);

            PB.Size = OrgBmp.Size;
            PB.Parent = this;
            PB.Image = OrgBmp;

            Lines.Add(new Line(new Point(0, 0), new Point(100, 100), Color.Red));
            Lines.Add(new Line(new Point(20, 30), new Point(450, 200), Color.Green));
            Lines.Add(new Line(new Point(300, 400), new Point(60, 300), Color.Blue));

            RefreshImage();

            SelectedLine = Lines[1]; // 删除绿线
        }

        void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete && SelectedLine != null)
            {
                Lines.Remove(SelectedLine);
                RefreshImage();
            }
        }

        void RefreshImage()
        {
            Bitmap CacheBmp = new Bitmap(OrgBmp);
            Graphics G = Graphics.FromImage(CacheBmp);
            foreach (Line L in Lines)
                G.DrawLine(new Pen(new SolidBrush(L.Color)), L.P1, L.P2);
            G.Dispose();
            PB.Image = CacheBmp;
        }
    }
}

#5


其实你最主要的问题是pick问题(就是是不是选中的问题)
就是将先选中的问题
楼上的已经把选中的给删除了,你可以写一个pick()方法解决
如果有疑问可以加qq 282231501 注明: 图形

#6


如果你是在鼠标单击等事件里画图,那是没法选择删除的。

正确方法应该是楼上代码所说,将所有的线存放在集合里,鼠标划线的时候加入集合,选择的时候在集合里查找那条线符合单击的点的位置,如何在集合里删除这个线,在重绘事件里将集合的线全部显示就可以了

不过如果你是按这个方法做的话,我想应该也不会问这个问题了,应该是直接在单击事件里绘图了吧,那要改改代码了

#7


我觉得是……把不删除的线再重新画一遍……

#8


不甚理解,学习了~

#9


该回复于2009-06-11 11:15:47被版主删除

#10


blog.csdn.net/dunao
参照V1.0.0.5的那版本的(VS2008开发)

#11


#12


至于选中问题,比较麻烦,如果要鼠标直接可选中,可以试试套用直线的两点式公式,不过公式要变换形式为(y-y1)/(y2-y1)-(x-x1)/(x2-x1)<误差值的形式,不过细节处理起来还是蛮麻烦的

#13


谢谢大家 一会看一下 搞定就结贴

#14


四楼正解。 。  。。 

#15


研究代码Ing 

#16


不太了解

#17


重绘???  Up

#18


学习下~~~

#19


这两天有点事 一直没把程序研究完 明天晚上结贴!!再顶一下吧 看看还有什么惊喜收获没 呵呵

#20


不理解,我也想学习

#21


我画了一个矩形也不知道在页面怎么删除它

#1


最好给点代码 谢谢大虾

#2


不太明白你这啥意思,但是帮忙顶了

#3


给画好的每根线做个标记。

#4


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication11
{
    class Line
    {
        public Point P1, P2;
        public Color Color;

        public Line(Point P1, Point P2, Color Color)
        {
            this.P1 = P1;
            this.P2 = P2;
            this.Color = Color;
        }
    }

    public partial class Form1 : Form
    {
        Bitmap OrgBmp = new Bitmap(500, 500);
        List<Line> Lines = new List<Line>();
        PictureBox PB = new PictureBox();
        Line SelectedLine = null;

        public Form1()
        {
            InitializeComponent();

            this.Controls.Clear();
            this.AutoSize = true;
            this.KeyPreview = true;
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);

            PB.Size = OrgBmp.Size;
            PB.Parent = this;
            PB.Image = OrgBmp;

            Lines.Add(new Line(new Point(0, 0), new Point(100, 100), Color.Red));
            Lines.Add(new Line(new Point(20, 30), new Point(450, 200), Color.Green));
            Lines.Add(new Line(new Point(300, 400), new Point(60, 300), Color.Blue));

            RefreshImage();

            SelectedLine = Lines[1]; // 删除绿线
        }

        void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete && SelectedLine != null)
            {
                Lines.Remove(SelectedLine);
                RefreshImage();
            }
        }

        void RefreshImage()
        {
            Bitmap CacheBmp = new Bitmap(OrgBmp);
            Graphics G = Graphics.FromImage(CacheBmp);
            foreach (Line L in Lines)
                G.DrawLine(new Pen(new SolidBrush(L.Color)), L.P1, L.P2);
            G.Dispose();
            PB.Image = CacheBmp;
        }
    }
}

#5


其实你最主要的问题是pick问题(就是是不是选中的问题)
就是将先选中的问题
楼上的已经把选中的给删除了,你可以写一个pick()方法解决
如果有疑问可以加qq 282231501 注明: 图形

#6


如果你是在鼠标单击等事件里画图,那是没法选择删除的。

正确方法应该是楼上代码所说,将所有的线存放在集合里,鼠标划线的时候加入集合,选择的时候在集合里查找那条线符合单击的点的位置,如何在集合里删除这个线,在重绘事件里将集合的线全部显示就可以了

不过如果你是按这个方法做的话,我想应该也不会问这个问题了,应该是直接在单击事件里绘图了吧,那要改改代码了

#7


我觉得是……把不删除的线再重新画一遍……

#8


不甚理解,学习了~

#9


该回复于2009-06-11 11:15:47被版主删除

#10


blog.csdn.net/dunao
参照V1.0.0.5的那版本的(VS2008开发)

#11


#12


至于选中问题,比较麻烦,如果要鼠标直接可选中,可以试试套用直线的两点式公式,不过公式要变换形式为(y-y1)/(y2-y1)-(x-x1)/(x2-x1)<误差值的形式,不过细节处理起来还是蛮麻烦的

#13


谢谢大家 一会看一下 搞定就结贴

#14


四楼正解。 。  。。 

#15


研究代码Ing 

#16


不太了解

#17


重绘???  Up

#18


学习下~~~

#19


这两天有点事 一直没把程序研究完 明天晚上结贴!!再顶一下吧 看看还有什么惊喜收获没 呵呵

#20


不理解,我也想学习

#21


我画了一个矩形也不知道在页面怎么删除它