none
如何讓TreeView被選取 RRS feed

  • 問題

  • 請問一下

    我有一個TreeView跟一個ListView

     

    TreeView長的像是...

    台灣
     └台北
     └高雄
     └台中

     

    假設我選ListView的高雄....TreeView的高雄就會被選取...而且反白

    private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
            {
               
                foreach(ListViewItem lvi in ListView1.SelectedItems)
                {
                    TreeNodeCollection nodes = this.TreeView1.Nodes;
                    foreach (TreeNode n in nodes)
                    {
                        PrintRecursive(n,lvi.SubItems[3].Text.ToString());
                                                //SubItems[3].Text.ToString()是我NODE的name
                    }

                }
               
            }

    //遞迴
    private void PrintRecursive(TreeNode treeNode,string nodeName)
            {
                foreach (TreeNode tn in treeNode.Nodes)
                {
                     // 判斷node.name和我ListView傳過來的name一樣...就是同一個node...就把它選取
                    if (tn.Name.Equals(nodeName))                 
                   {
                        this.cdmTreeView.SelectedNode = tn;
                        this.cdmTreeView.SelectedNode.TreeView.Select();
                        this.cdmTreeView.Focus();

                    }
                    PrintRecursive(tn, nodeName);
                }
               
            }

    我現在的問題是....我這樣的寫法....TreeView1是有沒選到沒錯...

    可是它沒有取得焦點..(node沒有被反白)

    我都要再click一次TreeView...它剛剛選取的node才會被反白

    不知道是那邊寫錯了

     

    還請大家指教一下....謝謝.....

    2007年1月25日 下午 05:49

解答

  • 只需用下列兩行即可.

    treeview1.SelectedNode = treeview1.Nodes[0].Nodes[0];//指定那一個node被選到
    treeview1.Focus();

    而且在跑迴圈時,如果找到node了,如果沒有什麼其它需求,加個break或return會好一點,沒必要把迴圈全部跑完.

    再者,如果你的需求只是這樣的話,大可不必寫的那麼複雜

    private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    foreach (TreeNode tn1 in treeview1.Nodes)
    {
         foreach (TreeNode tn2 in tn1.Nodes)
         {
              if (tn2.Text == comboBox1.SelectedItem.ToString())
              {
                   treeview1.SelectedNode = tn2;
                   treeview1.Focus();
                   return;
               }
         }
    }

    }

    2007年1月30日 上午 07:15