winform 的treeview如何定位節點


節點是動態添加的..
就知道節點名
類似:

根節點
  -節點
    -節點1
    -節點2
  -節點
    -節點1
    -節點1
    -節點1

21 个解决方案

#1


類似:

根節點
  -節點
   -節點1
   -節點2
  -節點
   -節點1
   -節點2
   -節點3

#2


 你是要取    一個節點的值還是要顯示,  不是很清楚你在問什么?

#3



        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                
                string nodeName = "";//先獲取要找的樹節點名稱
                TreeNode node=new TreeNode();
                bool bFind = FindNode(treeView1.Nodes, nodeName, ref node);
                if(bFind)  //找到了
                {
                    //...........
                }
            }
            catch(Exception ex)
            {

            }
        }
        /// <summary>
        /// 遞歸算法實現節點查找
        /// </summary>
        /// <param name="nodeColl">子節點集合</param>
        /// <param name="szName">要查找的樹節點名</param>
        /// <param name="node">找到返回的樹節點</param>
        /// <returns>找到與否</returns>
        private bool FindNode(TreeNodeCollection nodeColl,string szName, ref TreeNode node)
        {
            foreach(TreeNode sub in nodeColl)
            {
                if (sub.Name == szName)
                {
                    node = sub;
                    return true;
                }
                else
                    return FindNode(sub.Nodes, szName, ref node);
            }

            return false;
        }

#4


就是 在窗體加載的時候  焦點定位到某個節點(節點是動態添加的.)
 比如:
窗體加載后 直接就成這樣了

#5


TreeView.SelectedNode 

如果當前未選定任何 TreeNode,SelectedNode 屬性則為 nullNothingnullptrnull 引用(在 Visual Basic 中為 Nothing)。

設置此屬性時,指定的節點將滾入視圖,所有父節點都將展開,使指定的節點可見。

當選定節點的父節點或任何祖先節點以編程方式或通過用戶的操作折疊時,折疊的節點將成為選定的節點。

#6


TreeView.SelectedNode 

如果當前未選定任何 TreeNode,SelectedNode 屬性則為 nullNothingnullptrnull 引用(在 Visual Basic 中為 Nothing)。

設置此屬性時,指定的節點將滾入視圖,所有父節點都將展開,使指定的節點可見。

當選定節點的父節點或任何祖先節點以編程方式或通過用戶的操作折疊時,折疊的節點將成為選定的節點。

#7


 應該可以用循環動態添加減少節點的  。。。

#8


pink 能詳細說說么.. 最好提供下代碼 參考,  
我一開始 搞錯了.


根節點
  -節點
   -節點1
   -節點2
根節點
  -節點
   -節點1
   -節點2
   -節點3
根節點
  -節點
類似這樣的treeview
在窗體加載時 焦點定位到 某個最里面的節點(節點名字可能相同, 但是最里面的節點名字不同)

#9


huzhenfeng1111..
 您說的 好模糊啊.. 表示看不懂

#10


剛才網速問題,發了2遍。

TreeNode pTreeNodeFocus = null;
在加載TreeView的時候設置pTreeNodeFocus=某一個你要定位的節點
加載完成后設置TreeView.SelectedNode = pTreeNodeFocus;

#11


引用 10 樓 pink12345 的回復:
剛才網速問題,發了2遍。

TreeNode pTreeNodeFocus = null;
在加載TreeView的時候設置pTreeNodeFocus=某一個你要定位的節點
加載完成后設置TreeView.SelectedNode = pTreeNodeFocus;


  如何才能找到節點是關鍵.. 

用3樓的 遞歸算法 只能找第一個根節點里的節點.. 而且 如果 第一個根節點下的第一個子節點和我要找的節
點名字相同 他就直接取這個節點了 不會再往下找了 打個比方

比如我要取名字為B的節點

-A
 -B
  -B
-C
 -D
  -E
  -E
  -E
-F
 -G

像這樣的 樹的話 他只能取到第一個 B節點 取不到 B節點下面的 那個B節點

#12


節點就只有名字,沒有其他的屬性值嗎?

#13


 節點還有個Text屬性 添加節點時 一起賦給它了..  soga 我懂了!  多謝 pingk..

#14


額..又有 新問題了..  

這個 遞歸算法 貌似 只能找第一個根節點下的子節點. 剩余的節點怎么辦呢.

#15


該回復於2011-10-12 17:59:08被版主刪除

#16


你沒有是我給你的遞歸算法?

#17


引用 16 樓 sdl2005lyx 的回復:
你沒有是我給你的遞歸算法?

試過了  就是只 找第一個根節點 的第一個子節點 其他的 不找 。不知 為什么..

#18


你想找全部的,稍微動動腦筋,在我基礎上改改就行:

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                
                string nodeName = "";//先獲取要找的樹節點名稱
                //TreeNode node=new TreeNode();
                List<TreeNode> nodeList = new List<TreeNode>();
                bool bFind = FindNode(treeView1.Nodes, nodeName, nodeList);
                if(bFind)  //找到了
                {
                    //...........
                }
            }
            catch(Exception ex)
            {

            }
        }
        private bool FindNode(TreeNodeCollection nodeColl,string szName, List<TreeNode> nodeList)
        {
            bool bFind = false;
            foreach(TreeNode sub in nodeColl)
            {
                if (sub.Name == szName)
                {
                    //node = sub;
                    bFind = true;
                    nodeList.Add(sub);
                }
                else
                    return FindNode(sub.Nodes, szName, nodeList);
            }

            return bFind;
        }

#19


nodeList就是把找到所有節點集合,明白沒有?

#20


18樓說的可以用來找到所有的節點。
 

但是怎么才可以設置多個節點同時被選中呢?

#21


嗯 已經解決了..多謝啦~

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com