2013-03-19 37 views
1

我正在使用從TreeView繼承的三態樹視圖。如何禁用(灰色)C#中三態樹視圖中的複選框?

http://www.codeproject.com/Articles/202435/Tri-State-Tree-View

顯然對我怎樣才能變成灰色文本: TreeView with multi-color TreeNode text

使用所描述的事件處理程序,我可以輕鬆地更改特定項目的文本顏色的RI-國樹視圖。但是,如何在三態樹視圖中更改特定複選框的顏色,使其看起來像是灰顯/禁用?

請注意,我用的是樹狀的代碼項目,不是一般的TreeVieuw: Disable and grey out a check box of treenode

+0

你不能在選定的節點和設置特定的複選框這樣的方式..? – MethodMan 2013-03-19 19:42:40

回答

1

你的情況存在是因爲TreeNode不具有Enabled財產沒有簡單/快捷方式。你將不得不自己添加這個函數。我看了一下TriStateTreeView的代碼,我可以發表一些評論來幫助你。

拱起部會很容易,你會發現在構造函數中:

case 0: CheckBoxRenderer.DrawCheckBox(chkGraphics, new Point(0, 1), CheckBoxState.UncheckedNormal); 
break; 
case 1: CheckBoxRenderer.DrawCheckBox(chkGraphics, new Point(0, 1), CheckBoxState.CheckedNormal); 
break; 
case 2: CheckBoxRenderer.DrawCheckBox(chkGraphics, new Point(0, 1), CheckBoxState.MixedNormal); 
break; 

這部分填充StateImageList將存儲位圖每一種可能的狀態。您需要添加System.Windows.Forms.VisualStylesCheckBoxState.UncheckedDisabled,CheckBoxState.CheckedDisabledCheckBoxState.MixedDisabled中已經存在的其他三張照片。

然後,當你想爲實例影響CheckedDisabled appearence到節點上,您將需要更改TreeNode財產StateImageIndex,這樣myNode.StateImageIndex = (int)CheckedState.CheckedDisabled;

更復雜的部分將是邏輯的實現。 TriStateTreeView只覆蓋Windows.Forms.TreeView中的五個事件,您將需要更改它們以處理您的新功能。您可能必須在頂部添加如下內容: if(e.Node.StateImageIndex == (int)CheckedState.CheckedDisabled || ...) return;但在每種情況下可能都不那麼簡單,因此請確保檢查每種方法。

相關問題