none
TreeViewが選択されたタイミングでアイコンの表示を切り替えたい RRS feed

  • 質問

  •  

    VB2005で開発しています。

     

    TreeViewを使用して階層構造で表示しています。
    ImageList1にはフォルダ(閉)、フォルダ(開)、テキストファイルの
    アイコンが登録されています。
    ※Indexは記載した順に設定されています。

     

    この状態で、最下層のものにはテキストファイルのアイコンを表示して、
    それ以外はフォルダ(閉)のアイコンを表示したいと考えています。

     

    またフォルダが開かれたら、フォルダ(開)のアイコンが表示されるように
    切り替えたいのですが、どのようにしたら良いかわかりませんでした。

     

    画面の初期表示時は以下のようにプログラムしました。

    Code Snippet

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            Me.TreeView1.Nodes.Clear()

            Me.TreeView1.ImageList = Me.ImageList1

            Me.TreeView1.Nodes.Add("001", "あ行")
            Me.TreeView1.Nodes("001").Nodes.Add("001", "あ")
            Me.TreeView1.Nodes("001").Nodes.Add("001", "い")
            Me.TreeView1.Nodes("001").Nodes.Add("001", "う")
            Me.TreeView1.Nodes("001").Nodes.Add("001", "え")
            Me.TreeView1.Nodes("001").Nodes.Add("001", "お")

            Me.TreeView1.Nodes.Add("002", "か行")
            Me.TreeView1.Nodes("002").Nodes.Add("001", "か")
            Me.TreeView1.Nodes("002").Nodes.Add("001", "き")
            Me.TreeView1.Nodes("002").Nodes.Add("001", "く")
            Me.TreeView1.Nodes("002").Nodes.Add("001", "け")
            Me.TreeView1.Nodes("002").Nodes.Add("001", "こ")

            Me.TreeView1.Nodes.Add("003", "さ行")

        End Sub

     

     

    ここまではできたのですが、これ以降がプログラムできませんでした。

     

    最下層のものだけを異なるアイコンにするには、どうしたら良いのでしょうか?

    またフォルダの開け閉めの表示方法がどうしても分かりませんでした。

     

    アドバイス頂けませんか?

    ぜひよろしくお願いいたします。

    2008年9月3日 12:41

回答

  • コンドルさん こんにちは

     

    確認はしていませんが、TreeViewのBeforeCollapse,BeforeExpandイベントでフォルダの開く、閉じるを変更すればよいかなと思います。

     

    最下層のものだけ異なるアイコンにするというのは、TreeViewのプロパティで指定したいということですか?

    ざっと見た感じではそれらしきものは見当たりませんでした。

     

    2008年9月3日 23:57

すべての返信

  • コンドルさん こんにちは

     

    確認はしていませんが、TreeViewのBeforeCollapse,BeforeExpandイベントでフォルダの開く、閉じるを変更すればよいかなと思います。

     

    最下層のものだけ異なるアイコンにするというのは、TreeViewのプロパティで指定したいということですか?

    ざっと見た感じではそれらしきものは見当たりませんでした。

     

    2008年9月3日 23:57
  • handcraftさん、ご回答ありがとうございます。

     

    >確認はしていませんが、TreeViewのBeforeCollapse,BeforeExpandイベントでフォルダの開く、閉じるを変更すればよいかなと思います。
    BeforeCollapse,BeforeExpandイベントで無事実現できました。
    このイベントが分からず、苦労しておりましたので、大変助かりました。

     

    >最下層のものだけ異なるアイコンにするというのは、TreeViewのプロパティで指定したいということですか?
    >ざっと見た感じではそれらしきものは見当たりませんでした。
    最下層のアイコンはそれぞれのNodeで設定すれば、良いのですね。
    理解できました。

     

    解決した方法を載せておきます。

    Code Snippet

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.TreeView1.ImageList = Me.ImageList1
            Me.TreeView1.Nodes.Add("001", "あ行")
            With Me.TreeView1.Nodes("001")
                .Nodes.Add("001", "あ")
                .Nodes("001").ImageIndex = 2
                .Nodes.Add("002", "い")
                .Nodes("002").ImageIndex = 2
                .Nodes.Add("003", "う")
                .Nodes("003").ImageIndex = 2
                .Nodes.Add("004", "え")
                .Nodes("004").ImageIndex = 2
                .Nodes.Add("005", "お")
                .Nodes("005").ImageIndex = 2
            End With
        End Sub

        Private Sub TreeView1_BeforeCollapse(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeCollapse
            e.Node.ImageIndex = 0
        End Sub

        Private Sub TreeView1_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand
            e.Node.ImageIndex = 1
        End Sub

     

     

     

    大変助かりました。
    ありがとうございました。

    2008年9月4日 0:43