[.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