這可以通過覆蓋WndProc()並捕獲WM_ERASEBKGND消息來實現。下面顯示的控件執行此操作。然而,你會很快發現爲什麼Windows窗體TreeView類不這樣做。隨着「平滑滾動」系統選項打開,你會得到非常醜陋的文物。不提缺乏節點文字透明度。不,沒有修復,只有一個完成替換不依賴於本機Windows控件的控件可以解決此問題。不是你通常應該考慮的東西,除非它是來自非常有名的零部件供應商。
using System;
using System.Drawing;
using System.Windows.Forms;
class MyTreeView : TreeView {
private Image mImage;
public Image Image {
get { return mImage; }
set { mImage = value; Invalidate(); }
}
protected override void OnAfterCollapse(TreeViewEventArgs e) {
if (mImage != null) Invalidate();
base.OnAfterCollapse(e);
}
protected override void OnAfterExpand(TreeViewEventArgs e) {
if (mImage != null) Invalidate();
base.OnAfterExpand(e);
}
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
if (m.Msg == 0x14 && mImage != null) {
using (var gr = Graphics.FromHdc(m.WParam)) {
gr.DrawImage(mImage, Point.Empty);
}
}
}
}
這可能對我很懶,但它與TreeView控件有什麼不同? i.m你可以quickley交換它只是爲了試用目的,看看它的外觀和感覺等? – IbrarMumtaz 2010-07-31 15:18:22
,看起來像一個驚人的小控件,但我花了無數個小時和時間圍繞TreeView控件構建我的應用程序。 那個建立了這個控件的小夥子看起來好像他可以發佈一個小公告:它太好了,但我不能因爲一個控件而改變我的應用程序的核心功能。背景圖像!花了很長時間在photoshop建設它也???? – IbrarMumtaz 2010-07-31 15:44:55
@IbrarMumtaz - 是的,這是一個恥辱。恐怕我不知道如何設置TreeView控件的背景。 – 2010-07-31 15:58:28