l'ajout de nœuds enfants dans treeview

je suis nouveau à C# et je n'ai aucune expérience en programmation. Mais j'ai fini Un C# basics. Maintenant je voudrais concevoir une vue d'arbre simple en ajoutant le noeud parent et le noeud enfant.

j'aimerais ajouter un deuxième enfant pour le second noeud, je suis assez coincé ici et je ne sais pas ce qui va suivre.

des idées?

Voici le code:

    private void addParentNode_Click(object sender, EventArgs e)
    {
        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
    }

    private void addChildNode_Click(object sender, EventArgs e)
    {
        string yourChildNode;
        yourChildNode = textBox1.Text.Trim();
        treeView2.Nodes[0].Nodes.Add(yourChildNode);
    }

Désolé, je n'ai pas été clair, je ne suis pas sûr si j'ai vraiment besoin de celui-ci ici:

  //treeView1.BeginUpdate(); 
  //treeView1.Nodes.Clear();

ce que je suis essayer de le faire, c'est d'ajouter des Noeuds parents et des noeuds enfants. Dans mon code, je peux ajouter plusieurs noeuds parents, mais si je veux ajouter un noeud enfant, il n'ajoute que le premier noeud parent. Je veux que si j'ajoute un noeud enfant, je veux l'ajouter au second parent ou au troisième parent.

dans mon code, je n'utilise qu'un seul treeview ici qui s'appelle treeview2 Voici le capture d'écran

voici à quoi ressemble mon code final: Avant de mettre l'autre, je reçois un erreur si Je ne sélectionne rien. Donc j'ai fait de cette façon que s'il n'y a rien sélectionné il ajoutera le "noeud enfant" au "noeud par défaut" ou (noeud parent1). Il semble que cela fonctionne bien. Merci les gars;-)

    //This is for adding a parent node
    private void addParentNode_Click(object sender, EventArgs e)
    {
        treeView2.BeginUpdate();

        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
        treeView2.EndUpdate();
    }

    //This is for adding child node
    private void addChildNode_Click(object sender, EventArgs e)
    {
        if (treeView2.SelectedNode != null)
        {
            string yourChildNode;
            yourChildNode = textBox1.Text.Trim();

            treeView2.SelectedNode.Nodes.Add(yourChildNode);
            treeView2.ExpandAll();
        }
        //This is for adding the child node to the default node(parent 1 node)
        else
        {
            string yourChildNode;
            yourChildNode = textBox1.Text.Trim();
            treeView2.Nodes[0].Nodes.Add(yourChildNode);
        }

question supplémentaire: y a-t-il d'autres façons d'améliorer le code? Car ici, je déclare la chaîne "votrechildnode" deux fois. Une dans le SI et l'autre dans l'autre, y a-t-il une simplification?

13
demandé sur Brian Webster 2009-05-19 12:38:15

9 réponses

C'est pas méchant, mais j'ai oublié de vous appeler treeView2.EndUpdate() dans votre addParentNode_Click() méthode.

Vous pouvez également appeler treeView2.ExpandAll() à la fin de votre addChildNode_Click() méthode pour voir votre enfant nœud directement.

private void addParentNode_Click(object sender, EventArgs e) {
  treeView2.BeginUpdate();
  //treeView2.Nodes.Clear();
  string yourParentNode;
  yourParentNode = textBox1.Text.Trim();
  treeView2.Nodes.Add(yourParentNode);
  treeView2.EndUpdate();
}

private void addChildNode_Click(object sender, EventArgs e) {
  if (treeView2.SelectedNode != null) {
    string yourChildNode;
    yourChildNode = textBox1.Text.Trim();
    treeView2.SelectedNode.Nodes.Add(yourChildNode);
    treeView2.ExpandAll();
  }
}

je ne sais pas si c'était une erreur ou pas mais il y avait 2 TreeViews. Je l'ai changé en seulement 1 TreeView...

EDIT: Réponse à la question supplémentaire:

Vous pouvez déclarer la variable contenant le nom du noeud enfant en dehors du SI clause:

private void addChildNode_Click(object sender, EventArgs e) {
  var childNode = textBox1.Text.Trim();
  if (!string.IsNullOrEmpty(childNode)) {
    TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0];
    if (parentNode != null) {
      parentNode.Nodes.Add(childNode);
      treeView2.ExpandAll();
    }
  }
}

Remarque: reportez-vous à http://www.yoda.arachsys.com/csharp/csharp2/nullable.html pour plus d'informations sur l' ?? opérateur.

18
répondu Julien Poulin 2009-05-20 09:15:10

Peut-je ajouter à Stormenet exemple, certains KISS (Keep It Simple & Stupid):

si vous avez déjà une treeView ou si vous en avez créé une instance: Peuplons - nous de données-Ex. Un parent deux enfants:

            treeView1.Nodes.Add("ParentKey","Parent Text");
            treeView1.Nodes["ParentKey"].Nodes.Add("Child-1 Text");
            treeView1.Nodes["ParentKey"].Nodes.Add("Child-2 Text");

Un Autre Ex. deux parents d'abord avoir deux enfant deuxième enfant:

            treeView1.Nodes.Add("ParentKey1","Parent-1  Text");
            treeView1.Nodes.Add("ParentKey2","Parent-2 Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("Child-2 Text");
            treeView1.Nodes["ParentKey2"].Nodes.Add("Child-3 Text");

prendre si plus loin - sous-enfant de l'enfant 2:

            treeView1.Nodes.Add("ParentKey1","Parent-1  Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("ChildKey2","Child-2 Text");
            treeView1.Nodes["ParentKey1"].Nodes["ChildKey2"].Nodes.Add("Child-3 Text");

comme vous le voyez, vous pouvez avoir autant d'enfants et de parents que vous le voulez et ceux-ci peuvent avoir des les enfants des enfants et ainsi de suite.... Espère que je l'aide!

10
répondu Roman Polen. 2011-08-24 09:12:59

exemple d'ajout de noeuds enfant:

private void AddExampleNodes()
        {
            TreeNode node;

            node = treeView1.Nodes.Add("Master node");
            node.Nodes.Add("Child node");
            node.Nodes.Add("Child node 2");

            node = treeView1.Nodes.Add("Master node 2");
            node.Nodes.Add("mychild");
            node.Nodes.Add("mychild");
        }
2
répondu Stormenet 2009-05-19 08:48:52

on dirait que vous ajoutez seulement des enfants au premier parent treeView2.Nodes[0].Nodes.Add(yourChildNode)

Selon la façon dont vous voulez qu'il se comporte, vous avez besoin d'être explicite sur le nœud parent vous souhaitez ajouter de l'enfant.

Par exemple, à partir de votre capture d'écran, si vous voulez ajouter l'enfant au second noeud, vous devez:

treeView2.Nodes[1].Nodes.Add(yourChildNode)

Si vous souhaitez ajouter les enfants du nœud sélectionné, obtenir le TreeView.SelectedNode et ajoutez les enfants à il.



TreeView pour se faire une idée du fonctionnement de la classe. Malheureusement la documentation msdn est assez légère sur les échantillons de code...



J'ai raté pas mal de contrôles de sécurité!



Quelque chose comme (non testé):

private void addChildNode_Click(object sender, EventArgs e) {
  TreeNode ParentNode = treeView2.SelectedNode;  // for ease of debugging!
  if (ParentNode != null) {
    ParentNode.Nodes.Add("Name Of Node");
    treeView2.ExpandAll();   // so you can see what's been added              
    treeView2.Invalidate();  // requests a redraw
  }
}
2
répondu Byron Ross 2009-05-19 12:29:03

j'avais besoin de faire quelque chose de similaire et j'ai rencontré les mêmes problèmes. J'ai utilisé L'événement AfterSelect pour m'assurer que je ne recevais pas le noeud précédemment sélectionné.

il est en fait très facile de référencer le noeud correct pour recevoir le nouveau noeud enfant.

private void TreeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
   //show dialogbox to let user name the new node
   frmDialogInput f = new frmDialogInput();
   f.ShowDialog();

    //find the node that was selected
    TreeNode myNode = TreeView1.SelectedNode;
    //create the new node to add
    TreeNode newNode = new TreeNode(f.EnteredText);
    //add the new child to the selected node
    myNode.Nodes.Add(newNode);
}
1
répondu tkflick 2013-11-07 18:15:05
void treeView(string [] LineString)
    {
        int line = LineString.Length;
        string AssmMark = "";
        string PartMark = "";
        TreeNode aNode;
        TreeNode pNode;
        for ( int i=0 ; i<line ; i++){
            string sLine = LineString[i];
            if ( sLine.StartsWith("ASSEMBLY:") ){
                sLine  = sLine.Replace("ASSEMBLY:","");
                string[] aData = sLine.Split(new char[] {','});
                AssmMark  = aData[0].Trim();
                //TreeNode aNode;
                //aNode = new TreeNode(AssmMark);
                treeView1.Nodes.Add(AssmMark,AssmMark);
            }
            if( sLine.Trim().StartsWith("PART:") ){
                sLine  = sLine.Replace("PART:","");
                string[] pData = sLine.Split(new char[] {','});
                PartMark = pData[0].Trim();
                pNode = new TreeNode(PartMark);
                treeView1.Nodes[AssmMark].Nodes.Add(pNode);
            }
        }
0
répondu Tours 2012-03-07 07:35:21

Vous pouvez faire comme suit pour peupler treeView avec parent et child node. Et aussi avec affichage et valeur membre des noeuds parent et enfant:

   arrayRoot = taskData.GetRocordForRoot();  // iterate through database table
    for (int j = 0; j <arrayRoot.length; j++) { 
                TreeNode root = new TreeNode();  // Creating new root node
                root.Text = "displayString";
                root.Tag = "valueString";
                treeView1.Nodes.Add(root); //Adding the root node

             arrayChild = taskData.GetRocordForChild();// iterate through database table
                for (int i = 0; i < arrayChild.length; i++) {
                    TreeNode child = new TreeNode(); // creating child node
                    child.Text = "displayString"
                    child.Tag = "valueString";
                    root.Nodes.Add(child); // adding child node
                }

            }
0
répondu Rashedul.Rubel 2013-03-29 14:25:39
SqlConnection con = new SqlConnection(@"Data Source=NIKOLAY;Initial Catalog=PlanZadanie;Integrated Security=True");
        SqlCommand cmd = new SqlCommand();
        DataTable dt = new DataTable();
        public void loadTree(TreeView tree)
        {
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT [RAZDEL_ID],[NAME_RAZDEL] FROM [tbl_RAZDEL]";
            try
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    tree.Nodes.Add(reader.GetString(1));
                    tree.Nodes[0].Nodes.Add("yourChildNode");
                    tree.ExpandAll();

                }

                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка с сообщением: " + ex.Message);
            }


        }

0
répondu koly86 2015-12-06 18:58:40

les gars utilisent ce code pour ajouter des noeuds et des childnodes pour TreeView à partir du code C#. *

KISS (Keep It Simple & Stupid :)*

protected void Button1_Click (object sender, EventArgs e)

{

        TreeNode a1 = new TreeNode("Apple");

        TreeNode b1 = new TreeNode("Banana");
        TreeNode a2 = new TreeNode("gree apple");
        TreeView2.Nodes.Add(a1);
        TreeView2.Nodes.Add(b1);
        a1.ChildNodes.Add(a2);

}

-1
répondu Bhanu P 2014-07-28 12:56:50