none
如何取得 TreeView 節點內所有最底層的節點 RRS feed

  • 問題

  • 您好,想請問不曉得有沒有什麼方式可以取得TreeView節點下的所有末節點!
    像是以下,若我點選在A的節點時我可以拿到A02 / A2 這兩個節點的名稱(只要節點下沒有其他NODE就取最下層的NODE名稱)~
    有什麼方法可以取得我要的資料嗎

    因為,遞迴目前我還不太會用,所以想請問是否可以指導>"<
    再次感謝


    A
    |-A1
    |   |-A02
    |-A2
    B
    |-B1
    C

    2010年2月3日 上午 03:42

解答

  • 寫遞迴最重要的是邏輯觀念, 否則繞來繞去可能會繞昏
    以你的例子來看, 其實沒有幾行程式就可以解
    下面是一個範例, 畫面上就放一個TreeView和一個Button, Button click後則開始找子節點
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            For Each myNode As TreeNode In TreeView1.Nodes <--從Treeview1的每一個根節點開始找起
                Test(myNode) <--將根節點傳入Test遞迴函式
            Next

        End Sub

        Private Sub Test(ByVal InputNode As TreeNode)
            If InputNode.Nodes.Count = 0 Then  <--如果傳進來的節點 ( 因為遞迴的關係, 不一定是根節點) 以下的Nodes屬性的Count=0, 表示以下無節點, 則以Messagebox顯示
                MessageBox.Show(InputNode.Name)
            Else <--如果以下還有節點,
                For Each myNode As TreeNode In InputNode.Nodes <---把所有InputNode底下的節點再拋回呼叫Test函式 (就是因為這個動作所以稱為遞迴)
                    Test(myNode)
                Next
            End If
        End Sub

    如果以上程式你用看的看不懂, 建議你多用一些Messagebox去顯示程式到那個位置所出現的Node資訊, 然後用筆記下來, 觀察你所記錄的結果, 就會比較容易了解遞迴怎麼運作.
    若是你只覺得這個Code可以解決你的問題而照抄不誤, 那你下次遇到遞迴還是不會寫. 自己權衡一下輕重吧.
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    • 已標示為解答 cychiu 2010年2月4日 上午 07:28
    2010年2月3日 下午 05:58
    版主

所有回覆

  • 小歐大給的連結可以達到你要的需求
    不過你要再多加一個判斷,確定當下Node沒有子節點時才跑
    nodes.Add(childNode.Text)
    2010年2月3日 上午 04:14
  • 寫遞迴最重要的是邏輯觀念, 否則繞來繞去可能會繞昏
    以你的例子來看, 其實沒有幾行程式就可以解
    下面是一個範例, 畫面上就放一個TreeView和一個Button, Button click後則開始找子節點
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            For Each myNode As TreeNode In TreeView1.Nodes <--從Treeview1的每一個根節點開始找起
                Test(myNode) <--將根節點傳入Test遞迴函式
            Next

        End Sub

        Private Sub Test(ByVal InputNode As TreeNode)
            If InputNode.Nodes.Count = 0 Then  <--如果傳進來的節點 ( 因為遞迴的關係, 不一定是根節點) 以下的Nodes屬性的Count=0, 表示以下無節點, 則以Messagebox顯示
                MessageBox.Show(InputNode.Name)
            Else <--如果以下還有節點,
                For Each myNode As TreeNode In InputNode.Nodes <---把所有InputNode底下的節點再拋回呼叫Test函式 (就是因為這個動作所以稱為遞迴)
                    Test(myNode)
                Next
            End If
        End Sub

    如果以上程式你用看的看不懂, 建議你多用一些Messagebox去顯示程式到那個位置所出現的Node資訊, 然後用筆記下來, 觀察你所記錄的結果, 就會比較容易了解遞迴怎麼運作.
    若是你只覺得這個Code可以解決你的問題而照抄不誤, 那你下次遇到遞迴還是不會寫. 自己權衡一下輕重吧.
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    • 已標示為解答 cychiu 2010年2月4日 上午 07:28
    2010年2月3日 下午 05:58
    版主