Как получить фокус на узле дерева с расширением txt при закрытии или скрытии подчиненной формы - PullRequest
0 голосов
/ 12 ноября 2010

Привет всем, у меня будет загружена форма, когда я нажму на ячейку datagridview, которая была моей основной формой. Теперь, что мне нужно, когда я нажимаю на кнопку «Сохранить» в открывшейся форме, я закрываю эту форму. Затем я должен автоматически выбрать узел дерева.

Я пытался написать

       treeview.focus()
    treeview.select ()

но это не работает для меня.

В моей основной форме у меня будут элементы управления представлением дерева и сеткой просмотра данных.

Любая идея, пожалуйста

После сохранения и всей проделанной работы я вызвал функцию, которую я пишу в 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 ]

1 голос
/ 12 ноября 2010

со ссылкой на 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);
    }
}
1 голос
/ 12 ноября 2010

Этот код открывает древовидное представление (расширяется) с выбранным узлом и выбирает узел

    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);
        }
    }
1 голос
/ 12 ноября 2010

В строке, следующей за той, где вы запускаете свою подчиненную форму (например, secondForm.ShowDialog () или что-то подобное, в строке после этой строки), добавьте операторы treeView.Focus и treeview.select, чтобы при возвратев вызывающей форме основное внимание уделяется древовидной структуре.

0 голосов
/ 27 февраля 2016
    public void FindNode(TreeNodeCollection nodeCollection)
    {
        foreach (TreeNode node in nodeCollection)
        {
            foreach (TreeNode nd in node.ChildNodes)
            {
                if (nd.Text.Contains(".txt"))
                {
                    nd.Select(); 
                    return;
                }
            }
        }  
    }
0 голосов
/ 12 ноября 2010

Я предполагаю, что вы пытаетесь выбрать конкретный узел в вашем TreeView, тогда как фрагмент кода, который вы разместили выше, устанавливает только сам элемент управления TreeView.

Для этого необходимо установить свойство SelectedNode элемента управления TreeView для отдельного элемента узла, который вы хотите отобразить в качестве выбранного. Указанный узел автоматически прокручивается в поле зрения, и все его родительские узлы расширяются, чтобы он был видимым. Например:

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

Вы прокомментировали другой ответ, что пытаетесь найти узел с расширением "txt", что предполагает, что вы не обязательно знаете индекс или местоположение узла, который вы хотите выбрать в TreeView , Чтобы найти его, вам придется пройтись по всем узлам в коллекции TreeView.Nodes и найти совпадение. Как только вы нашли узел, соответствующий вашим критериям, вы можете установить этот элемент узла в качестве выбранного узла:

foreach (TreeNode node in myTreeView.Nodes)
{
    if (node.Text.Contains("txt")) //or however you want to find a matching node
    {
        myTreeView.SelectedNode = node;
    }
}
0 голосов
/ 12 ноября 2010

Попробуйте это

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;
        }            
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...