2010-07-31 26 views
2

我一直在做一些研究,這似乎是不可能的,除非我開始挖掘InterOperabilty,即PInvoke和什麼不是我真正的水壺魚。我重新發布這個問題,因爲我想知道是否有人設法做到這一點呢?如何設置TreeView控件的背景圖像? (VS 2008/.Net 3.5/C#/ WinForms)

我對所有圖像使用.png並獲得專業人員提供我的圖像,因此我知道這些圖像以最佳質量最適合的格式提供。

看起來標準的樹視圖控件不直接支持背景圖像,這樣也不允許它的背景顏色設置爲透明?任何人對這兩個人有什麼想法?

回答

3

如果您願意使用第三方庫,請查看http://objectlistview.sourceforge.net/cs/index.html - 但請注意它是GPL。在那裏設置背景圖像很容易。

+0

這可能對我很懶,但它與TreeView控件有什麼不同? i.m你可以quickley交換它只是爲了試用目的,看看它的外觀和感覺等? – IbrarMumtaz 2010-07-31 15:18:22

+0

,看起來像一個驚人的小控件,但我花了無數個小時和時間圍繞TreeView控件構建我的應用程序。 那個建立了這個控件的小夥子看起來好像他可以發佈一個小公告:它太好了,但我不能因爲一個控件而改變我的應用程序的核心功能。背景圖像!花了很長時間在photoshop建設它也???? – IbrarMumtaz 2010-07-31 15:44:55

+0

@IbrarMumtaz - 是的,這是一個恥辱。恐怕我不知道如何設置TreeView控件的背景。 – 2010-07-31 15:58:28

3

這可以通過覆蓋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); 
      } 
     } 
    } 
} 
+0

感謝這....如果我有機會,它值得一看。 – IbrarMumtaz 2010-08-01 12:43:32

+1

但如何使節點背景爲一些? – curiosity 2010-10-28 04:35:26

+0

@curiosity System.Drawing.Image treeBackImage = global :: Tow.Properties.Resources.img1; my_tree_view.Image = treeBackImage; – Hamid 2016-10-13 10:44:59