2009-08-18 15 views
3

ツリービューが3つあります。 私は各グループレベルにそれが持つ子の数を加えました。 この番号を別の色または太字で設定したいとします。c#2色のテキストを設定する

例:

ツリー[3]
| _ FirstGroupという[2]
    | _のfirstChild
    | _ secondChild
| _ secondGroup [1]
    | _ thirdChild

これはWindowsフォームアプリケーションです。 私はそれが不可能だと思うが、私は確信したい。

答えて

8

TreeViewコントロールのDrawModeをOwnerDrawTextに設定し、DrawNodeイベントハンドラー内で描画を実行すると、これが可能になると思います。

(ノード文字列をスペースで分割し、最初の要素を太字で描画し、文字列の残りの部分を通常のフォントで描画します。空白がない場合は、代わりにOSに描画させます)。

private void TreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{ 
    string regex = @"^.*\s+\[\d+\]$"; 
    if (Regex.IsMatch(e.Node.Text, regex, RegexOptions.Compiled)) 
    { 
     string[] parts = e.Node.Text.Split(' '); 
     if (parts.Length > 1) 
     { 
      string count = parts[parts.Length - 1]; 
      string text = " " + string.Join(" ", parts, 0, parts.Length - 1); 
      Font normalFont = e.Node.TreeView.Font; 

      float textWidth = e.Graphics.MeasureString(text, normalFont).Width; 
      e.Graphics.DrawString(text, 
            normalFont, 
            SystemBrushes.WindowText, 
            e.Bounds); 

      using (Font boldFont = new Font(normalFont, FontStyle.Bold)) 
      { 
       e.Graphics.DrawString(count, 
             boldFont, 
             SystemBrushes.WindowText, 
             e.Bounds.Left + textWidth, 
             e.Bounds.Top); 
      } 
     } 
    } 
    else 
    { 
     e.DrawDefault = true; 
    } 
} 

注:あなたの代わりに再作成して描かれている各ツリーノードのためにそれを配置するの太字フォントを保持しているフォームに変数やプロパティを追加することもできます。

+0

これは私がまだ知りませんでした...ちょうど私が必要なもの – Gerbrand

+0

元のサンプルのようにテキストをレンダリングするコードを更新しました –

0

この機能が本当に必要なものであれば、TreeViewコントロールを拡張できます。私が見る限り、それは封印されていません。

関連する問題