代码之家  ›  专栏  ›  技术社区  ›  Developer

如何在关闭或隐藏子窗体时聚焦到扩展名为txt的treeview节点

  •  0
  • Developer  · 技术社区  · 14 年前

    嗨,我将有一个窗体加载时,我点击数据网格视图单元格,这是我的主要窗体。现在我需要的是当我在打开的表单上单击save时,我将关闭此表单。然后我必须让树视图节点自动被选中。

    我试着写

           treeview.focus()
        treeview.select ()
    

    但这对我不起作用。

    在主窗体上,我将有树视图控件和datagridview控件。

    有什么想法吗

    保存并完成所有工作后,我调用了一个函数,该函数是我在main.cs中编写的

    这是密码

      public void loadingDatafrom()
       {
        treeview.focus();
        treeview.select();
       }
    

    我的节点如下

        ACH
         |-> Some.txt
           |->Child
             |->Child1
               |->Child like this i will have and these were create programatically except root node all are created dynamically
    
    6 回复  |  直到 14 年前
        1
  •  1
  •   Javed Akram    14 年前

    关于 里夫纳 回答

    public Form1()
    {
        InitializeComponent();
        FindNode(treeView1.Nodes, ".txt");
        this.ActiveControl = treeView1;
    }  
    
    bool found = false;
    public void FindNode(TreeNodeCollection nodeCollection, string TextToFind)
    {
       foreach (TreeNode node in nodeCollection)
       {
           if (found)
              continue;
           if (node.Text.Contains(TextToFind))
           {
              treeView1.SelectedNode = node;
              TreeNode parentNode = node.Parent;
              while (parentNode != null)
              {
                  parentNode.Expand();
                  parentNode = parentNode.Parent;
              }
              found = true;
              break;
           }
           FindNode(node.Nodes, TextToFind);
        }
    }
    
        2
  •  1
  •   Mamta D    14 年前

    在启动子窗体的行(例如:secondForm.ShowDialog();或类似语句,在此行后面的行中)中,添加treeView.Focus和treeView.select语句,以便在返回调用窗体时,焦点位于treeView上。

        3
  •  1
  •   riffnl    14 年前

    此代码打开带有selectednode的treeview(展开),并选择节点

        public Form1()
        {
            InitializeComponent();
            FindNode(treeView1.Nodes, ".txt");
            this.ActiveControl = treeView1;
        }
        public void FindNode(TreeNodeCollection nodeCollection, string TextToFind)
        {
            foreach (TreeNode node in nodeCollection)
            {
                if (node.Text.Contains(TextToFind))
                {
                    treeView1.SelectedNode = node;
                    TreeNode parentNode = node.Parent;
                    while (parentNode != null)
                    {
                        parentNode.Expand();
                        parentNode = parentNode.Parent;
                    }
                    break;
                }
                FindNode(node.Nodes, TextToFind);
            }
        }
    
        4
  •  0
  •   Cody Gray    14 年前

    我假设您正在尝试选择 TreeView ,而上面发布的代码片段只将焦点设置为 树状视图 控制自己。

    为此,您需要设置 SelectedNode property 树状视图 控件设置为要显示为选定项的单个节点项。指定的节点将自动滚动到视图中,并展开其所有父节点,使其可见。例如:

    myTreeView.SelectedNode = myTreeView.Nodes[0]; //where 0 is the index of the node you want to select
    

    您对另一个答案发表了评论,认为您正在尝试查找扩展名为“txt”的节点,这表明您不一定知道要在 树状视图 . 要找到它,必须遍历 TreeView.Nodes collection 找一个匹配的。找到符合条件的节点后,可以将该节点项设置为选定节点:

    foreach (TreeNode node in myTreeView.Nodes)
    {
        if (node.Text.Contains("txt")) //or however you want to find a matching node
        {
            myTreeView.SelectedNode = node;
        }
    }
    
        5
  •  0
  •   Javed Akram    14 年前

    试试这个

    private void Form1_Activated(object sender, EventArgs e)
    {
        treeView1.Focus();
    }
    

    更新时间:

    这能帮到你的工作,但我也同意这不是有效的方法

    private void Form1_Activated(object sender, EventArgs e)
        {           
            treeView1.ExpandAll();
            while (true)
            {
                if (treeView1.SelectedNode.Text.Contains(".txt"))
                {
                    treeView1.Focus();
                    return;
                }
                treeView1.SelectedNode = treeView1.SelectedNode.NextVisibleNode;
            }            
        }
    
        6
  •  0
  •   S Khatri    9 年前
        public void FindNode(TreeNodeCollection nodeCollection)
        {
            foreach (TreeNode node in nodeCollection)
            {
                foreach (TreeNode nd in node.ChildNodes)
                {
                    if (nd.Text.Contains(".txt"))
                    {
                        nd.Select(); 
                        return;
                    }
                }
            }  
        }