看板 C_Sharp 關於我們 聯絡資訊
小弟最近遇到一個問題 想請問看看有沒有人也遇過 有方式解決的 大致上是有一個固定大小的Panel_A 在程式內利用迴圈產生許多相同的usercontrol(假設有50個)) 放進Panel_A內 並用一個List<UserControl>來管理這些 每個UserControl內有一個panel 並且讀取某張圖片放入BackgroundImage 然後滑鼠在Panel_A上做 MouseDown + MouseMove的行為 在Panel_A的MouseMove觸發時判斷滑鼠左右位移的量 來改變每個usercontrol的location 現象就類似在拖拉這些Image 但數量一多(大約十幾個就會)移動時就可感受到拖拉時有殘影的感覺 或是拖拉後停止時 圖片有瞬間被掃過的刷新感 我目前掌握到的資訊: 網路大多都是設置DoubleBuffer的方法 也有試過SuspendLayout 和ResumeLayout 但還是會有該現象 只是嚴重與否 也試過每次移動時呼叫refresh invalid update等方式 但refresh因為會立即重繪,使得拖拉操作感變慢 產生拖拉到定位才刷新的錯覺 另外兩個方式雖不造成變慢 但殘影的感覺仍略微嚴重 故此想上來請問是否有更好的解決方式 我目前的想法是找尋 更改location時,不要重繪usercontrol內的panel或是該usercontrol 因為圖片並無改變大小 希望有類似經驗的人能夠提供一些方法 或是一些方向來討論 感謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.19.8 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1430839528.A.69F.html
KanoLoa: 最簡單的方法,換強一點的硬體 05/05 23:30
KanoLoa: 釜底抽薪的辦法,預設繪圖不要用,全部自己畫... 05/05 23:31
KanoLoa: 然後wpf這方面的優化作比較好.. 05/05 23:31
enher: 自己畫的意思是註冊panel的paint事件?在該事件內 05/05 23:41
enher: 利用graphic.drawimage將檔案畫在panel上嗎? 05/05 23:42
enher: WPF我是很想用的 但是....目前無法這麼做... 05/05 23:43
neo5277: doevent? 05/06 00:11
KanoLoa: 是啊,就跟做遊戲是一樣的... 05/06 17:43
Litfal: 不要用control,全部自己畫XD 05/07 23:59