请问graphics.DrawString("dd",....);写在Form_Load()中就执行,而写在OnPaint中才能执行,这是为什么呢?

时间:2021-04-25 20:06:29
Form_Load中是这样写的
Graphics g=CreateGhaphics();
g.DrawString(.....);
g.Dispose();

OnPaint()是这样写的
Graphics g=e.Grahpics;
g.DrawString(.....);
g.Dispose();

写在OnPaint就可以 这是为什么呢?谢谢

5 个解决方案

#1


窗体上所绘的图形在窗体被别的窗体覆盖之后就回被“抹”掉,并不是持久的,呵呵
若要让它不被抹掉,就要能够在窗体重新得到焦点之后重绘
OnPaint事件正是响应了窗体需被重绘的事件,比如最小化之后还原,重新获得焦点等

#2


楼主帖子标题有误,提问题要严谨, 鉴定完毕!

#3


搂主是不是说写法不一样,OnPaint里只要Graphics g=e.Grahpics;就行了。这是因为OnPaint的参数e包含了Form的Graphics对象,而在Form_Load中没有包含Form的Graphics对象,所以要建立一个Graphics g=CreateGhaphics();这里是简写了,其实是this.CreateGraphics就是建立本Form的Graphics对象。

#4


我是说一样的drawstring 为什么在OnPaint里面可以,在Form_load里面不行呢?
g.DrawString(.....);

#5


UP一下

#1


窗体上所绘的图形在窗体被别的窗体覆盖之后就回被“抹”掉,并不是持久的,呵呵
若要让它不被抹掉,就要能够在窗体重新得到焦点之后重绘
OnPaint事件正是响应了窗体需被重绘的事件,比如最小化之后还原,重新获得焦点等

#2


楼主帖子标题有误,提问题要严谨, 鉴定完毕!

#3


搂主是不是说写法不一样,OnPaint里只要Graphics g=e.Grahpics;就行了。这是因为OnPaint的参数e包含了Form的Graphics对象,而在Form_Load中没有包含Form的Graphics对象,所以要建立一个Graphics g=CreateGhaphics();这里是简写了,其实是this.CreateGraphics就是建立本Form的Graphics对象。

#4


我是说一样的drawstring 为什么在OnPaint里面可以,在Form_load里面不行呢?
g.DrawString(.....);

#5


UP一下