[.NET] 如何在视窗大小改变时重新绘图?

楼主: dogs1231992 (河豚)   2016-01-21 01:57:49
请输入专案类型(网站专案或者应用程式专案):应用程式
小弟最近在写一个绘图相关的简易程式,当视窗改变时我希望先将原本的线给清掉
接着重新画上去,用的指令是:
Me.Refresh()
Me.CreateGraphics.DrawLine(BlackPen, X1, Y1, X2, Y2)
会这样做的原因是因为CreateGraphics所产生的线很容易被其它东西盖掉
因此我的程式内会有大量重绘图的指令(但是这些指令都是在我做了某些动作时才会发生
例如我画了另一条线时
但是我遇到了两个问题:
1. 首先,我在绘图区加上一条线
http://imgur.com/kQmbMzy
2. 假如这时候我开启别的程式,把绘图区盖住了,这个部分的线就会不见
http://imgur.com/NO5kwyW
http://imgur.com/o60CAnw
我找了很久,还是找不到这个事件的名称,也就是当这个Form变成最上层视窗时动作
3. 如果我改成缩小视窗的话,不足的部分会暂时被遮蔽
http://imgur.com/HPmcmFV
4. 当我重新恢复成最大化时(直接按右上角),原本被盖住的部分不会重新出现
http://imgur.com/QfrfAU6
但是我如果改用手动拉边框的话,线则会一直存在
5. 当我最小化之后再放大,一样的状况是全部的线都会消失
http://imgur.com/RKRdRQl
想请问是否有办法让所有线都能在视窗大小、顺序改变时一直存在?
我有想过用 Me.MouseMove 事件,但是这个事件会导致程式疯狂画图,搞到lag
感谢各位乡民的帮忙 > <
我发现Resize其实有动作,但是线就是画不出来...
至于第一个状况,我有试过GotFocus的指令,但是无效
※ 文章网址: https://www.ptt.cc/bbs/Visual_Basic/M.1453312672.A.97D.html
※ 编辑: dogs1231992 (140.112.22.13), 01/21/2016 02:01:09
作者: niklee29 (就是爱喝茶)   2016-01-21 08:18:00
我是把绘图完的结果放到 image 缓冲,在丢到picturebox的image属性就解决了,这样做重绘时也不会有闪烁的情况
作者: evil2004 (忘却深渊)   2016-01-21 08:48:00
试试Activate
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-01-21 11:57:00
以前都马开一个PictureBox,然后(1) 照 picturebox 的大小做一个 bitmap(2) 做一个 graphics = graphics.fromimage(bitmap)(3) 画在bitmap上(4) 画好把那个bitmap再指定给picturebox接着就可以保留那个bitmap一直重复(3)(4)
楼主: dogs1231992 (河豚)   2016-01-21 14:51:00
感谢各位的帮忙,我刚刚发现我昨天用远端写code会发生上述现象,但是我现在回到电脑前,用Resize就不会有这个现象了,但是我还是会改用PictureBox的方法来改写这个部分 :)
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-01-21 17:18:00
是因为连线软件没有重画那块?

Links booklink

Contact Us: admin [ a t ] ucptt.com