ツリービューが3つあります。 私は各グループレベルにそれが持つ子の数を加えました。 この番号を別の色または太字で設定したいとします。c#2色のテキストを設定する
例:
ツリー[3]
| _ FirstGroupという[2]
| _のfirstChild
| _ secondChild
| _ secondGroup [1]
| _ thirdChild
これはWindowsフォームアプリケーションです。 私はそれが不可能だと思うが、私は確信したい。
ツリービューが3つあります。 私は各グループレベルにそれが持つ子の数を加えました。 この番号を別の色または太字で設定したいとします。c#2色のテキストを設定する
例:
ツリー[3]
| _ FirstGroupという[2]
| _のfirstChild
| _ secondChild
| _ secondGroup [1]
| _ thirdChild
これはWindowsフォームアプリケーションです。 私はそれが不可能だと思うが、私は確信したい。
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;
}
}
注:あなたの代わりに再作成して描かれている各ツリーノードのためにそれを配置するの太字フォントを保持しているフォームに変数やプロパティを追加することもできます。
この機能が本当に必要なものであれば、TreeViewコントロールを拡張できます。私が見る限り、それは封印されていません。
これは私がまだ知りませんでした...ちょうど私が必要なもの – Gerbrand
元のサンプルのようにテキストをレンダリングするコードを更新しました –