作者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/m.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