Re: [問題] listbox的item發生閃動問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章