[.NET] 如何在視窗大小改變時重新繪圖?

看板Visual_Basic作者 (河豚)時間8年前 (2016/01/21 01:57), 8年前編輯推噓1(1013)
留言14則, 4人參與, 最新討論串1/1
請輸入專案類型(網站專案或者應用程式專案):應用程式 小弟最近在寫一個繪圖相關的簡易程式,當視窗改變時我希望先將原本的線給清掉 接著重新畫上去,用的指令是: 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

01/21 08:18, , 1F
我是把繪圖完的結果放到 image 緩衝,在丟到picturebox
01/21 08:18, 1F

01/21 08:18, , 2F
的image屬性就解決了,這樣做重繪時也不會有閃爍的情況
01/21 08:18, 2F

01/21 08:48, , 3F
試試Activate
01/21 08:48, 3F

01/21 11:57, , 4F
以前都馬開一個PictureBox,然後
01/21 11:57, 4F

01/21 11:57, , 5F
(1) 照 picturebox 的大小做一個 bitmap
01/21 11:57, 5F

01/21 11:57, , 6F
(2) 做一個 graphics = graphics.fromimage(bitmap)
01/21 11:57, 6F

01/21 11:58, , 7F
(3) 畫在bitmap上
01/21 11:58, 7F

01/21 11:58, , 8F
(4) 畫好把那個bitmap再指定給picturebox
01/21 11:58, 8F

01/21 11:59, , 9F
接著就可以保留那個bitmap一直重複(3)(4)
01/21 11:59, 9F

01/21 14:51, , 10F
感謝各位的幫忙,我剛剛發現我昨天用遠端寫code
01/21 14:51, 10F

01/21 14:52, , 11F
會發生上述現象,但是我現在回到電腦前,用Resize就
01/21 14:52, 11F

01/21 14:52, , 12F
不會有這個現象了,但是我還是會改用PictureBox的方
01/21 14:52, 12F

01/21 14:52, , 13F
法來改寫這個部分 :)
01/21 14:52, 13F

01/21 17:18, , 14F
是因為連線軟體沒有重畫那塊?
01/21 17:18, 14F
文章代碼(AID): #1MdygWbz (Visual_Basic)
文章代碼(AID): #1MdygWbz (Visual_Basic)