在winform画图的问题?

康少_小贱 2011-08-11 05:53:46
需求是这样的,我在winform中,有一个panel,我在panel上画图,还有一个Button,但我单击这button的时候,就可以在panel上画图,再次单击的时候,上次的图还在,并且这次的图也在,两个重叠在一起了。也就是第一次单击的时候生成的图在,第二次也在,一直都在哦!


我想是单击一次,只能显示一次图,不要重叠。各位哥哥姐姐,帮帮忙啊!小弟不才,在此谢过
...全文
376 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2011-08-12
  • 打赏
  • 举报
回复
生成一个后台bmp直接,你第一次画完就保存到bmp上。
康少_小贱 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 shijie_li007 的回复:]
每次画图的方法,都记在一个栈内,返回上一步操作,就是把新的出栈,然后清理panel,再依次执行栈内的操作
[/Quote]

大哥,能说的清楚点吗?等你!!!!
shijie_li007 2011-08-12
  • 打赏
  • 举报
回复
每次画图的方法,都记在一个栈内,返回上一步操作,就是把新的出栈,然后清理panel,再依次执行栈内的操作
康少_小贱 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 andywangguanxi 的回复:]
设一个bool变量,单击过一次图在了,就把它设成true不再执行画图的代码
[/Quote]

那如果我再想button的时候,那如何我上次的图抹掉呢?
shijie_li007 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhongkang567 的回复:]

引用 5 楼 shijie_li007 的回复:
可以用panel.CreateGriphc().Clear()来清除啊


panel有这个CreateGriphc()方法?
[/Quote]


有啊,我前两天才用过。 不好意思,打错了,panel的 CreateGraphics().Clear()
EdsionWang 2011-08-12
  • 打赏
  • 举报
回复
设一个bool变量,单击过一次图在了,就把它设成true不再执行画图的代码
康少_小贱 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 enaking 的回复:]
用背景色再重绘一下次你上一个图形
[/Quote]

不好用
enaking 2011-08-12
  • 打赏
  • 举报
回复
用背景色再重绘一下次你上一个图形
康少_小贱 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shijie_li007 的回复:]
可以用panel.CreateGriphc().Clear()来清除啊
[/Quote]

panel有这个CreateGriphc()方法?
shijie_li007 2011-08-12
  • 打赏
  • 举报
回复
可以用panel.CreateGriphc().Clear()来清除啊
康少_小贱 2011-08-12
  • 打赏
  • 举报
回复
还有可能是我的UI上面的画的图形太多,来不及清楚吧,有好的解决方案吗
康少_小贱 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 isjoe 的回复:]
两次画图之间,调用panel的Refresh();
[/Quote]

Refresh()是重绘自己和任何的子控件,我只想重绘子控件,不需要在重绘自己了!那怎么办?谢谢
niuniu186 2011-08-12
  • 打赏
  • 举报
回复
可以用clear(背景颜色)或者refresh
styshoo1986 2011-08-12
  • 打赏
  • 举报
回复
每一个空间自己都可以refresh的
Cloud_drift 2011-08-12
  • 打赏
  • 举报
回复
不要画在控件上,每次都画在一个 bitmap 里面,然后界面上用 pictureBox 显示这个 bitmap。
  • 打赏
  • 举报
回复
重新绑定一下不就好了。。。
shijie_li007 2011-08-12
  • 打赏
  • 举报
回复
刚看到,我简单写了下,看能不能供你参考

public interface IDraw {
void Draw();
}


public class Line:IDraw {

private Graphics g;
private Point startPoint;
private Point endPoint;

public Line(Graphics g, Point p1, Point p2) {
this.g = g;
this.startPoint = p1;
this.endPoint = p2;
}

public void Draw() {
g.DrawLine(new Pen(Color.Black),startPoint.X,startPoint.Y,endPoint.X,endPoint.Y );
}

}



public class Cycle : IDraw {

private Graphics g;
private Point centerPoint;
private float radius;

public Cycle(Graphics g, Point p, float r) {
this.g = g;
this.centerPoint = p;
this.radius = r;
}

public void Draw() {
g.FillEllipse(new SolidBrush(Color.Black),centerPoint.X,centerPoint.Y,radius,radius);
}

}


public partial class Form1 : Form {

private Stack<IDraw> drawStack;

public Form1() {
InitializeComponent();
drawStack = new Stack<IDraw>();
}

private void button1_Click(object sender, EventArgs e) {
Draw(new Cycle(this.panel1.CreateGraphics(), new Point(0, 0), 100),drawStack);
}

private void button2_Click(object sender, EventArgs e) {
Draw(new Line(this.panel1.CreateGraphics(),new Point(0,0),new Point(100,100) ),drawStack);
}

private void button3_Click(object sender, EventArgs e) {
Last();
}

private void Draw(IDraw d,Stack<IDraw> stack) {
stack.Push(d);
d.Draw();
}

private void Last() {
drawStack.Pop();
this.panel1.CreateGraphics().Clear(Color.White);
Stack<IDraw> tempStack = new Stack<IDraw>();
while (drawStack.Count > 0) {
IDraw d = drawStack.Pop();
this.Draw(d,tempStack);
}
drawStack = tempStack;
}

}




不知道怎么上图啊
isjoe 2011-08-11
  • 打赏
  • 举报
回复
两次画图之间,调用panel的Refresh();
xuld 2011-08-11
  • 打赏
  • 举报
回复
在画之前,重新画一个 白色的 背景

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧