朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら 
.Net TreeViewでノードに子ノードがない時に文字色を変える





ここでは、TreeViewのノードの文字色を子ノードが無い時に色を変えていますが、条件を変えることによって色々な場面に対応できる可能性があります。

C#

    public partial class Form1 : Form
    {
        TreeView treeView1;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //TreeViewを子コントロールとして登録
            treeView1 = new TreeView();
            this.Controls.Add(this.treeView1);
            this.treeView1.Dock = DockStyle.Fill;
            //テスト用の子ノードを登録
            this.treeView1.Nodes.Add("動物");
            this.treeView1.Nodes[0].Nodes.Add("犬");
            this.treeView1.Nodes[0].Nodes[0].Nodes.Add("プードル");
            this.treeView1.Nodes[0].Nodes[0].Nodes.Add("トイプードル");
            this.treeView1.Nodes[0].Nodes[0].Nodes.Add("柴犬");
            this.treeView1.Nodes[0].Nodes.Add("猫");
            this.treeView1.Nodes[0].Nodes[1].Nodes.Add("三毛猫");
            this.treeView1.Nodes[0].Nodes[1].Nodes.Add("シャム");
            this.treeView1.Nodes[0].Nodes.Add("魚");
            this.treeView1.Nodes[0].Nodes[2].Nodes.Add("サメ");
            this.treeView1.Nodes[0].Nodes[2].Nodes.Add("イルカ");
            this.treeView1.Nodes[0].Nodes[2].Nodes.Add("アジ");
            this.treeView1.Nodes.Add("鉱物");
            this.treeView1.Nodes[1].Nodes.Add("カルシウム");
            this.treeView1.Nodes[1].Nodes.Add("鉄");
            this.treeView1.Nodes[1].Nodes.Add("銅");
            this.treeView1.Nodes.Add("植物");
            this.treeView1.Nodes[2].Nodes.Add("桜");
            this.treeView1.Nodes[2].Nodes.Add("松");
            this.treeView1.Nodes.Add("宇宙人");
            //フォントの色を変える処理
            SetForeColorOfTreeView(this.treeView1);
        }
        private void SetForeColorOfTreeView(TreeView tv)
        {
            //子ノードを全てチェックする
            for (int i = 0; i < tv.Nodes.Count; i++)
            {
                //子ノードのフォントの色を変える処理を呼び出す
                SetForeColorOfTreeNode(tv.Nodes[i]);
            }
        }
        private void SetForeColorOfTreeNode(TreeNode tn)
        {
            //ノードがアイテムを持っているかいないかチェック
            if (tn.Nodes.Count == 0)
            {
                //フォントの色を赤に変える
                tn.ForeColor = Color.Red;
                return;
            }
            //子ノードを全てチェックする
            for (int i = 0; i < tn.Nodes.Count; i++)
            {
                //子ノードを持っているので再帰呼び出しをする
                SetForeColorOfTreeNode(tn.Nodes[i]);
            }
        }
    }

VB.NET

Public Class Form1
    Dim treeView1 As TreeView
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TreeViewを子コントロールとして登録
        treeView1 = New TreeView()
        Me.Controls.Add(Me.treeView1)
        Me.treeView1.Dock = DockStyle.Fill
        'テスト用の子ノードを登録
        Me.treeView1.Nodes.Add("動物")
        Me.treeView1.Nodes(0).Nodes.Add("犬")
        Me.treeView1.Nodes(0).Nodes(0).Nodes.Add("プードル")
        Me.treeView1.Nodes(0).Nodes(0).Nodes.Add("トイプードル")
        Me.treeView1.Nodes(0).Nodes(0).Nodes.Add("柴犬")
        Me.treeView1.Nodes(0).Nodes.Add("猫")
        Me.treeView1.Nodes(0).Nodes(1).Nodes.Add("三毛猫")
        Me.treeView1.Nodes(0).Nodes(1).Nodes.Add("シャム")
        Me.treeView1.Nodes(0).Nodes.Add("魚")
        Me.treeView1.Nodes(0).Nodes(2).Nodes.Add("サメ")
        Me.treeView1.Nodes(0).Nodes(2).Nodes.Add("イルカ")
        Me.treeView1.Nodes(0).Nodes(2).Nodes.Add("アジ")
        Me.treeView1.Nodes.Add("鉱物")
        Me.treeView1.Nodes(1).Nodes.Add("カルシウム")
        Me.treeView1.Nodes(1).Nodes.Add("鉄")
        Me.treeView1.Nodes(1).Nodes.Add("銅")
        Me.treeView1.Nodes.Add("植物")
        Me.treeView1.Nodes(2).Nodes.Add("桜")
        Me.treeView1.Nodes(2).Nodes.Add("松")
        Me.treeView1.Nodes.Add("宇宙人")
        'フォントの色を変える処理
        SetForeColorOfTreeView(Me.treeView1)
    End Sub
    Private Sub SetForeColorOfTreeView(ByVal tv As TreeView)
        '子ノードを全てチェックする
        For i As Integer = 0 To tv.Nodes.Count - 1 Step 1
            '子ノードのフォントの色を変える処理を呼び出す
            SetForeColorOfTreeNode(tv.Nodes(i))
        Next
    End Sub
    Private Sub SetForeColorOfTreeNode(ByVal tn As TreeNode)
        'ノードがアイテムを持っているかいないかチェック
        If tn.Nodes.Count = 0 Then
            'フォントの色を赤に変える
            tn.ForeColor = Color.Red
            Return
        End If
        '子ノードを全てチェックする
        For i As Integer = 0 To tn.Nodes.Count - 1 Step 1
            '子ノードを持っているので再帰呼び出しをする
            SetForeColorOfTreeNode(tn.Nodes(i))
        Next
    End Sub
End Class








良いやや良い普通やや悪い悪い
1 0 3 0 0

投稿日時評価コメント