[Tips][TreeView] マウスポインターがラベルテキストの上にあるときに外観をハイパーリンクにする

マウスポインターがラベルテキストの上にあるときに外観をハイパーリンクにするにはHotTrackingプロパティにTrueを設定します。

下記は外観をハイパーリンクに設定する例です。

VBの例

' フォームロード時の処理
Private Sub Form16_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '親ノード
    Dim rootNode As New TreeNode("ルート")
    '子ノード
    Dim childNode1 As New TreeNode("子ノード1")
    Dim childNode2 As New TreeNode("子ノード2")
    '孫ノード
    Dim grandChildNode1 As New TreeNode("孫ノード1")
    Dim grandChildNode2 As New TreeNode("孫ノード2")
    Dim grandChildNode3 As New TreeNode("孫ノード3")

    '親ノードをTreeViewに追加
    TreeView1.Nodes.Add(rootNode)

    '子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1)
    rootNode.Nodes.Add(childNode2)

    '孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3)
    childNode1.Nodes.Add(grandChildNode1)
    childNode1.Nodes.Add(grandChildNode2)

    '全ノードを展開する
    TreeView1.ExpandAll()

    '★★★外観をハイパーリンクにする★★★
    TreeView1.HotTracking = True
End Sub

C#の例

// フォームロード時の処理
private void Form16_Load(object sender, EventArgs e)
{
    //親ノード
    TreeNode rootNode = new TreeNode("ルート");
    //子ノード
    TreeNode childNode1 = new TreeNode("子ノード1");
    TreeNode childNode2 = new TreeNode("子ノード2");
    //孫ノード
    TreeNode grandChildNode1 = new TreeNode("孫ノード1");
    TreeNode grandChildNode2 = new TreeNode("孫ノード2");
    TreeNode grandChildNode3 = new TreeNode("孫ノード3");

    //親ノードをTreeViewに追加
    treeView1.Nodes.Add(rootNode);

    //子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1);
    rootNode.Nodes.Add(childNode2);

    //孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3);
    childNode1.Nodes.Add(grandChildNode1);
    childNode1.Nodes.Add(grandChildNode2);

    //全ノードを展開する
    treeView1.ExpandAll();

    //★★★外観をハイパーリンクにする★★★
    treeView1.HotTracking = true;
}

[Tips][TreeView] 親ノードを取得する

選択されたノードの親ノードを取得するにはParentNodeプロパティを参照します。

選択されているノードがルートノードの場合は親ノードは存在しないため、ParentNodeプロパティはNothing(C#はNull)となります。

下記は親ノードを取得する例です。

[選択ノードの親ノードを取得する]ボタンがクリックされると、親ノードのラベルテキストを表示します。

VBの例

' フォームロード時の処理
Private Sub Form15_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '親ノード
    Dim rootNode As New TreeNode("ルート")
    '子ノード
    Dim childNode1 As New TreeNode("子ノード1")
    Dim childNode2 As New TreeNode("子ノード2")
    '孫ノード
    Dim grandChildNode1 As New TreeNode("孫ノード1")
    Dim grandChildNode2 As New TreeNode("孫ノード2")
    Dim grandChildNode3 As New TreeNode("孫ノード3")

    '親ノードをTreeViewに追加
    TreeView1.Nodes.Add(rootNode)

    '子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1)
    rootNode.Nodes.Add(childNode2)

    '孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3)
    childNode1.Nodes.Add(grandChildNode1)
    childNode1.Nodes.Add(grandChildNode2)

    '全ノードを展開する
    TreeView1.ExpandAll()
End Sub

' [選択ノードの親ノードを取得する]ボタンクリック時の処理
Private Sub btnGetParentNode_Click(sender As System.Object, e As System.EventArgs) Handles btnGetParentNode.Click
    '選択されているノードがあるか?
    If TreeView1.SelectedNode IsNot Nothing Then
        Dim msg As String

        If TreeView1.SelectedNode.Parent Is Nothing Then
            msg = "親ノードはありません"
        Else
            Dim parentNode As New TreeNode

            '★★★親ノードを取得する★★★
            parentNode = TreeView1.SelectedNode.Parent

            msg = parentNode.Text
        End If

        MessageBox.Show(msg)
    End If
End Sub

C#の例

// フォームロード時の処理
private void Form15_Load(object sender, EventArgs e)
{
    //親ノード
    TreeNode rootNode = new TreeNode("ルート");
    //子ノード
    TreeNode childNode1 = new TreeNode("子ノード1");
    TreeNode childNode2 = new TreeNode("子ノード2");
    //孫ノード
    TreeNode grandChildNode1 = new TreeNode("孫ノード1");
    TreeNode grandChildNode2 = new TreeNode("孫ノード2");
    TreeNode grandChildNode3 = new TreeNode("孫ノード3");

    //親ノードをTreeViewに追加
    treeView1.Nodes.Add(rootNode);

    //子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1);
    rootNode.Nodes.Add(childNode2);

    //孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3);
    childNode1.Nodes.Add(grandChildNode1);
    childNode1.Nodes.Add(grandChildNode2);

    //全ノードを展開する
    treeView1.ExpandAll();
}

// [選択ノードの親ノードを取得する]ボタンクリック時の処理
private void btnGetParentNode_Click(object sender, EventArgs e)
{
    //選択されているノードがあるか?
    if (treeView1.SelectedNode != null)
    {
        string msg;

        if (treeView1.SelectedNode.Parent == null)
            msg = "親ノードはありません";
        else
        {
            TreeNode parentNode = new TreeNode();

            //★★★親ノードを取得する★★★
            parentNode = treeView1.SelectedNode.Parent;

            msg = parentNode.Text;
        }

        MessageBox.Show(msg);
    }
}

[Tips][TreeView] ノードを結合する線の色を変更する

[ad code=2 align=left]
TreeViewコントロールでは、ノードを結合する線の色を変更することが可能です。

ノードを結合する線の色を変更するにはLineColorプロパティに線の色(Color構造体の値)を設定します。

下記は、ノードを結合する線の色を変更する例です。

VBの例

' フォームロード時の処理
Private Sub Form14_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '親ノード
    Dim rootNode As New TreeNode("ルート")

    '子ノード
    Dim childNode1 As New TreeNode("子ノード1")
    Dim childNode2 As New TreeNode("子ノード2")

    '孫ノード
    Dim grandChildNode1 As New TreeNode("孫ノード1")
    Dim grandChildNode2 As New TreeNode("孫ノード2")
    Dim grandChildNode3 As New TreeNode("孫ノード3")

    '親ノードをTreeViewに追加
    TreeView1.Nodes.Add(rootNode)

    '子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1)
    rootNode.Nodes.Add(childNode2)

    '孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3)
    childNode1.Nodes.Add(grandChildNode1)
    childNode1.Nodes.Add(grandChildNode2)

    '★★★ノードを結合する線の色をOrangeRedにする★★★
    TreeView1.LineColor = Color.OrangeRed

    '全ノードを展開する
    TreeView1.ExpandAll()
End Sub

C#の例

// フォームロード時の処理
private void Form14_Load(object sender, EventArgs e)
{
    //親ノード
    TreeNode rootNode = new TreeNode("ルート");
    //子ノード
    TreeNode childNode1 = new TreeNode("子ノード1");
    TreeNode childNode2 = new TreeNode("子ノード2");
    //孫ノード
    TreeNode grandChildNode1 = new TreeNode("孫ノード1");
    TreeNode grandChildNode2 = new TreeNode("孫ノード2");
    TreeNode grandChildNode3 = new TreeNode("孫ノード3");

    // 親ノードをTreeViewに追加
    treeView1.Nodes.Add(rootNode);

    // 子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1);
    rootNode.Nodes.Add(childNode2);

    // 孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3);
    childNode1.Nodes.Add(grandChildNode1);
    childNode1.Nodes.Add(grandChildNode2);

    // ★★★ノードを結合する線の色をOrangeRedにする★★★
    treeView1.LineColor = Color.OrangeRed;
        
    // 全ノードを展開する
    treeView1.ExpandAll();
}

[Tips][TreeView] 選択項目の幅全体が強調表示されるようにする

[ad code=2 align=left]
TreeViewコントロールでは、選択された項目の幅全体を強調表示することができます。

強調表示する場合にはノードを結合する線を非表示にし(ShowLinesプロパティにFalseを設定)、FullRowSelectプロパティにTrueを設定します。

下記は、選択項目の幅全体が強調表示されるようにする例です。

VBの例

' フォームロード時の処理
Private Sub Form13_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '親ノード
    Dim rootNode As New TreeNode("ルート")

    '子ノード
    Dim childNode1 As New TreeNode("子ノード1")
    Dim childNode2 As New TreeNode("子ノード2")

    '孫ノード
    Dim grandChildNode1 As New TreeNode("孫ノード1")
    Dim grandChildNode2 As New TreeNode("孫ノード2")
    Dim grandChildNode3 As New TreeNode("孫ノード3")

    '親ノードをTreeViewに追加
    TreeView1.Nodes.Add(rootNode)

    '子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1)
    rootNode.Nodes.Add(childNode2)

    '孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3)
    childNode1.Nodes.Add(grandChildNode1)
    childNode1.Nodes.Add(grandChildNode2)

    '★★★選択項目の幅全体が強調表示されるようにする★★★
    TreeView1.ShowLines = False     'ノード間を結ぶ線を非表示にする
    TreeView1.FullRowSelect = True  '項目選択に幅全体を強調表示する

    '全ノードを展開する
    TreeView1.ExpandAll()
End Sub

C#の例

// フォームロード時の処理
private void Form13_Load(object sender, EventArgs e)
{
    //親ノード
    TreeNode rootNode = new TreeNode("ルート");
    //子ノード
    TreeNode childNode1 = new TreeNode("子ノード1");
    TreeNode childNode2 = new TreeNode("子ノード2");
    //孫ノード
    TreeNode grandChildNode1 = new TreeNode("孫ノード1");
    TreeNode grandChildNode2 = new TreeNode("孫ノード2");
    TreeNode grandChildNode3 = new TreeNode("孫ノード3");

    // 親ノードをTreeViewに追加
    treeView1.Nodes.Add(rootNode);

    // 子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1);
    rootNode.Nodes.Add(childNode2);

    // 孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3);
    childNode1.Nodes.Add(grandChildNode1);
    childNode1.Nodes.Add(grandChildNode2);

    // ★★★選択項目の幅全体が強調表示されるようにする★★★
    treeView1.ShowLines = false;        //ノード間を結ぶ線を非表示にする
    treeView1.FullRowSelect = true;     //項目選択に幅全体を強調表示する

    // 全ノードを展開する
    treeView1.ExpandAll();
}

[Tips][TreeView] インデント幅を設定する

TreeViewコントロールではインデント幅を設定することができます。

インデントはIndentプロパティに設定し既定値は19です。

下記はインデントを設定する例です。

選択されたラジオボタンによってインデント幅を変更します。

VBの例

' フォームロード時の処理
Private Sub Form12_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '親ノード
    Dim rootNode As New TreeNode("ルート")

    '子ノード
    Dim childNode1 As New TreeNode("子ノード1")
    Dim childNode2 As New TreeNode("子ノード2")

    '孫ノード
    Dim grandChildNode1 As New TreeNode("孫ノード1")
    Dim grandChildNode2 As New TreeNode("孫ノード2")
    Dim grandChildNode3 As New TreeNode("孫ノード3")

    '親ノードをTreeViewに追加
    TreeView1.Nodes.Add(rootNode)

    '子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1)
    rootNode.Nodes.Add(childNode2)

    '孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3)
    childNode1.Nodes.Add(grandChildNode1)
    childNode1.Nodes.Add(grandChildNode2)

    '全ノードを展開する
    TreeView1.ExpandAll()
End Sub

' ラジオボタンのチェック変更時の処理
Private Sub rdoIndent_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rdoIndent38.CheckedChanged, rdoIndent19.CheckedChanged
    If rdoIndent19.Checked = True Then
        '★★★インデント幅を19にする★★★
        TreeView1.Indent = 19
    Else
        '★★★インデント幅を38にする★★★
        TreeView1.Indent = 38
    End If
End Sub

C#の例

// フォームロード時の処理
private void Form12_Load(object sender, EventArgs e)
{
    //親ノード
    TreeNode rootNode = new TreeNode("ルート");
    //子ノード
    TreeNode childNode1 = new TreeNode("子ノード1");
    TreeNode childNode2 = new TreeNode("子ノード2");
    //孫ノード
    TreeNode grandChildNode1 = new TreeNode("孫ノード1");
    TreeNode grandChildNode2 = new TreeNode("孫ノード2");
    TreeNode grandChildNode3 = new TreeNode("孫ノード3");

    // 親ノードをTreeViewに追加
    treeView1.Nodes.Add(rootNode);

    // 子ノードを親ノードに追加
    rootNode.Nodes.Add(childNode1);
    rootNode.Nodes.Add(childNode2);

    // 孫ノードを子ノードに追加
    childNode2.Nodes.Add(grandChildNode3);
    childNode1.Nodes.Add(grandChildNode1);
    childNode1.Nodes.Add(grandChildNode2);

      // 全ノードを展開する
    treeView1.ExpandAll();
}

// ラジオボタンのチェック変更時の処理
private void rdoIndent_CheckedChanged(object sender, EventArgs e)
{
    if (rdoIndent19.Checked == true)
    {
        //★★★インデント幅を19にする★★★
        treeView1.Indent = 19;
    }
    else
    {
        //★★★インデント幅を38にする★★★
        treeView1.Indent = 38;
    }
}