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?
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.
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!
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");
}
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
}
}
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);
}
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);
}
}
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
}
}
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);
}
}
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);
}