作者dogs1231992 (河豚)
看板Visual_Basic
标题[.NET] 如何在视窗大小改变时重新绘图?
时间Thu Jan 21 01:57:49 2016
请输入专案类型(网站专案或者应用程式专案):应用程式
小弟最近在写一个绘图相关的简易程式,当视窗改变时我希望先将原本的线给清掉
接着重新画上去,用的指令是:
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://webptt.com/cn.aspx?n=bbs/Visual_Basic/M.1453312672.A.97D.html
※ 编辑: dogs1231992 (140.112.22.13), 01/21/2016 02:01:09
1F:→ niklee29: 我是把绘图完的结果放到 image 缓冲,在丢到picturebox 01/21 08:18
2F:→ niklee29: 的image属性就解决了,这样做重绘时也不会有闪烁的情况 01/21 08:18
3F:推 evil2004: 试试Activate 01/21 08:48
4F:→ MOONRAKER: 以前都马开一个PictureBox,然後 01/21 11:57
5F:→ MOONRAKER: (1) 照 picturebox 的大小做一个 bitmap 01/21 11:57
6F:→ MOONRAKER: (2) 做一个 graphics = graphics.fromimage(bitmap) 01/21 11:57
7F:→ MOONRAKER: (3) 画在bitmap上 01/21 11:58
8F:→ MOONRAKER: (4) 画好把那个bitmap再指定给picturebox 01/21 11:58
9F:→ MOONRAKER: 接着就可以保留那个bitmap一直重复(3)(4) 01/21 11:59
10F:→ dogs1231992: 感谢各位的帮忙,我刚刚发现我昨天用远端写code 01/21 14:51
11F:→ dogs1231992: 会发生上述现象,但是我现在回到电脑前,用Resize就 01/21 14:52
12F:→ dogs1231992: 不会有这个现象了,但是我还是会改用PictureBox的方 01/21 14:52
13F:→ dogs1231992: 法来改写这个部分 :) 01/21 14:52
14F:→ MOONRAKER: 是因为连线软体没有重画那块? 01/21 17:18