2010-11-12 19 views
0

Salut à tous, un formulaire sera chargé lorsque je clique sur la cellule datagridview qui était ma forme principale. Maintenant, ce dont j'ai besoin, c'est quand je clique sur enregistrer sur le formulaire ouvert, je vais fermer ce formulaire. Ensuite, je dois obtenir le noeud de l'arbre sélectionné automatiquement.Comment obtenir le focus sur le noeud treeview avec l'extension txt à la fermeture ou à la dissimulation du sous-formulaire

J'ai essayé en écrivant

 treeview.focus() 
    treeview.select() 

mais cela ne fonctionne pour moi.

Sur mon formulaire principal, j'aurai le contrôle de l'arborescence et le contrôle de datagridview.

Toute idée s'il vous plaît

Après avoir enregistré et tout le travail de mon fait j'ai appelé une fonction que j'écris dans main.cs

Voici le code

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

Mes nœuds seront aussi suit

ACH 
    |-> Some.txt 
     |->Child 
     |->Child1 
      |->Child like this i will have and these were create programatically except root node all are created dynamically 
+0

donner une idée de n odes de votre arbre –

+0

C'est exactement la même question que vous avez déjà posée: http://stackoverflow.com/questions/3845685/is-it-possible-to-get-one-of-the-child-node-get- sélectionné-programmé. Quels problèmes rencontrez-vous avec la solution * que vous avez affichée ici? –

+0

@ cody gris: Pour que j'ai obtenu la solution, mais cela est différent j'ai essayé par écrit et seulement posté ici – Dotnet

Répondre

1

avec référence à riffnl réponse

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

Dans la ligne suivant celle où vous lancez votre sous-formulaire (Par exemple: secondForm.ShowDialog(); ou quelque chose de similaire, dans la ligne après cette ligne), ajoutez les instructions treeView.Focus et treeview.select afin que lorsque vous revenez au formulaire appelant, le focus soit sur l'arborescence.

+0

Salut ce ok est-il une autre façon d'obtenir le nœud avec txt comme nœud sélectionné – Dotnet

+0

si vous connaissez le numéro d'index alors vous pouvez le donner comme: treeview.Nodes [index] .focus –

0

Essayez cette

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

mise à jour:

cela va faire votre travail, mais je suis d'accord aussi ce n'est pas moyen efficace

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

Je dois me concentrer sur le noeud avec l'extension txt – Dotnet

+0

Cela ne fonctionne pas pour moi – Dotnet

+0

cela va se concentrer sur l'état que vous avez quitté –

0

Je suppose que vous essayez pour sélectionner un nœud particulier dans votre TreeView, alors que l'extrait de code t Le chapeau que vous avez posté ci-dessus ne règle que le contrôle TreeView lui-même.

Pour ce faire, vous devez définir le SelectedNode property du contrôle TreeView sur l'élément de noeud individuel que vous souhaitez voir sélectionné. Le noeud spécifié est automatiquement déroulé dans la vue et tous ses nœuds parents sont développés pour être visibles. Par exemple:

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

Vous avez parlé une autre réponse que vous essayez de trouver le nœud avec l'extension « txt », ce qui laisse supposer que vous ne connaissez pas nécessairement l'indice ou l'emplacement du nœud que vous voulez pour sélectionner dans le TreeView. Pour le trouver, vous devrez parcourir tous les nœuds du TreeView.Nodes collection et rechercher une correspondance.Une fois que vous avez trouvé un noeud correspondant à vos critères, vous pouvez définir cet élément de noeud comme noeud sélectionné:

foreach (TreeNode node in myTreeView.Nodes) 
{ 
    if (node.Text.Contains("txt")) //or however you want to find a matching node 
    { 
     myTreeView.SelectedNode = node; 
    } 
} 
+0

que jamais je ne seul le nœud racine devient sélectionné – Dotnet

+0

vous choisissez probablement le nœud racine, car il est le nœud avec un indice de 0. (le premier noeud affiché dans le contrôle a toujours un index de 0.) Notez également que chaque 'TreeNode' contient sa propre collection' Nodes', donc si vous h Si vous avez plusieurs niveaux de nœuds dans votre arborescence, vous devrez parcourir * chaque niveau * pour trouver celui que vous recherchez. –

1

Ce code ouvre l'arborescence (étend) avec le selectedNode et sélectionne le nœud

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

@ riffnl, +1 pour votre travail impressionnant; –

+0

votre code a un problème, j'ai corrigé dans ma réponse –

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