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 注明: 图形
就是将先选中的问题
楼上的已经把选中的给删除了,你可以写一个pick()方法解决
如果有疑问可以加qq 282231501 注明: 图形
#6
如果你是在鼠标单击等事件里画图,那是没法选择删除的。
正确方法应该是楼上代码所说,将所有的线存放在集合里,鼠标划线的时候加入集合,选择的时候在集合里查找那条线符合单击的点的位置,如何在集合里删除这个线,在重绘事件里将集合的线全部显示就可以了
不过如果你是按这个方法做的话,我想应该也不会问这个问题了,应该是直接在单击事件里绘图了吧,那要改改代码了
正确方法应该是楼上代码所说,将所有的线存放在集合里,鼠标划线的时候加入集合,选择的时候在集合里查找那条线符合单击的点的位置,如何在集合里删除这个线,在重绘事件里将集合的线全部显示就可以了
不过如果你是按这个方法做的话,我想应该也不会问这个问题了,应该是直接在单击事件里绘图了吧,那要改改代码了
#7
我觉得是……把不删除的线再重新画一遍……
#8
不甚理解,学习了~
#9
#10
blog.csdn.net/dunao
参照V1.0.0.5的那版本的(VS2008开发)
参照V1.0.0.5的那版本的(VS2008开发)
#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 注明: 图形
就是将先选中的问题
楼上的已经把选中的给删除了,你可以写一个pick()方法解决
如果有疑问可以加qq 282231501 注明: 图形
#6
如果你是在鼠标单击等事件里画图,那是没法选择删除的。
正确方法应该是楼上代码所说,将所有的线存放在集合里,鼠标划线的时候加入集合,选择的时候在集合里查找那条线符合单击的点的位置,如何在集合里删除这个线,在重绘事件里将集合的线全部显示就可以了
不过如果你是按这个方法做的话,我想应该也不会问这个问题了,应该是直接在单击事件里绘图了吧,那要改改代码了
正确方法应该是楼上代码所说,将所有的线存放在集合里,鼠标划线的时候加入集合,选择的时候在集合里查找那条线符合单击的点的位置,如何在集合里删除这个线,在重绘事件里将集合的线全部显示就可以了
不过如果你是按这个方法做的话,我想应该也不会问这个问题了,应该是直接在单击事件里绘图了吧,那要改改代码了
#7
我觉得是……把不删除的线再重新画一遍……
#8
不甚理解,学习了~
#9
#10
blog.csdn.net/dunao
参照V1.0.0.5的那版本的(VS2008开发)
参照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
我画了一个矩形也不知道在页面怎么删除它