如何在关闭或隐藏子窗体时将焦点放在具有txt扩展名的treeview节点上

时间:2010-11-12 11:25:59

标签: c# winforms treeview

大家好,当我点击datagridview单元格时,我将会加载一个表单,这是我的主要表单。现在我需要的是当我点击打开表格上的保存时,我将关闭此表格。然后我必须自动选择树视图节点。

我尝试写

       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 个答案:

答案 0 :(得分:1)

在你启动子窗体的那一行之后的行中(例如:secondForm.ShowDialog();或类似的东西,在这一行之后的行中),添加treeView.Focus和treeview.select语句,以便在返回时在调用表单中,重点是树视图。

答案 1 :(得分:1)

此代码使用selectednode打开树视图(展开)并选择节点

    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);
        }
    }

答案 2 :(得分:1)

参考 riffnl 回答

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);
    }
}

答案 3 :(得分:0)

试试这个

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;
        }            
    }

答案 4 :(得分:0)

我假设您尝试在TreeView中选择特定节点,而您在上面发布的代码段仅将焦点设置为TreeView控件本身。

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

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

您评论了另一个答案,即您正在尝试查找具有“txt”扩展名的节点,这表明您不一定知道要在{{1}中选择的节点的索引或位置}}。要找到它,您必须遍历TreeView.Nodes collection中的所有节点并查找匹配项。找到符合条件的节点后,可以将该节点项设置为所选节点:

TreeView

答案 5 :(得分:0)

    public void FindNode(TreeNodeCollection nodeCollection)
    {
        foreach (TreeNode node in nodeCollection)
        {
            foreach (TreeNode nd in node.ChildNodes)
            {
                if (nd.Text.Contains(".txt"))
                {
                    nd.Select(); 
                    return;
                }
            }
        }  
    }