Re: [問題] listbox的item發生閃動問題

看板C_Sharp (C#)作者 (猜猜偶素隨 ? ^*^)時間14年前 (2011/02/10 01:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《jiing24 (jiing)》之銘言: : 小弟的Form在BMP底圖上有一個ListBox裡頭的item是去讀取xml檔產生的 : 不過只有讀取一次 : 可是現在雖然運作正常 : 但是ListBox內的item項偶爾會不正常閃動 : 就是只要有視窗A蓋在listbox上頭蓋一半,然後再把含listbox送到上層時 : (底層仍是視窗A),就會發生閃動的問題,或是放著不管,有時就會發生閃動 : 想請問要如何設定listbox才不會發生lisbox的item會閃動的問題 : 謝謝 : 小弟目前是在看DrawMode和CauseValidation這二個屬性 : 不過也僅是亂猜而已 : 後來把DrawMode改成OwnerDrawFixed(因為控制項中的所有項目都是手動繪製,且有相同的大小) : 然後加了二行 : 在網路上找,發現了這裡也說到它有listbox item flashing 的問題(Item 0 flashing) : http://www.codeproject.com/cs/combobox/multicolumnlistbox.asp : 不過目前看其程式碼還看不出什麼端倪,還請各位給予建議。 key words: double buffered list box c sharp 根據作者的Final solution 在自訂義控制項中 加入下列程式碼即可 public DbTreeView() { // Enable default double buffering processing (DoubleBuffered returns true) SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); // Disable default CommCtrl painting on non-Vista systems if (Environment.OSVersion.Version.Major < 6) SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaint(PaintEventArgs e) { if (GetStyle(ControlStyles.UserPaint)) { Message m = new Message(); m.HWnd = Handle; m.Msg = WM_PRINTCLIENT; m.WParam = e.Graphics.GetHdc(); m.LParam = (IntPtr)PRF_CLIENT; DefWndProc(ref m); e.Graphics.ReleaseHdc(m.WParam); } base.OnPaint(e); } 我自己用的缺點是 強制開啟水平軸之後 水平軸捲動時會發生殘影 (垂直軸捲動時倒不會發生~奇怪) 目前是想到在水平軸捲動時 invalidate 不過不知道水平軸捲動的event是啥... 加在drawitem 中 沒有效果 = = 不曉得有沒有人有類似問題的解決方法可以提供參考?? http://www.codeproject.com/KB/list/double-buffered-tree-view.aspx?msg=3745576 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.119.163
文章代碼(AID): #1DKiddHf (C_Sharp)
文章代碼(AID): #1DKiddHf (C_Sharp)