Autor Beitrag
robby_robbt
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 01.12.10 20:26 
Ich habe ein TreeView:

-A
-B
---C
-----D
---[E]
---F
-G
-H


Node E ist selected. Wie finde ich den Name von B heraus? Also der Knoten in dem sich E befindet?
Vielen Dank für Eure Antworten!
robby_robbt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 01.12.10 21:19 
Du kannst einfach so lange zum Parent des aktuellen Knotens gehen, bis du bei der ersten Ebene angekommen bist. ;-)

Für diesen Beitrag haben gedankt: robby_robbt
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 01.12.10 21:40 
:D Ups.
Danke trotzdem! Wie kann ich denn für jeden Knoten zum Namen den Namen vom Parent hinzufügen?
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mi 01.12.10 21:54 
hat nich jeder knoten diese eigenschaft? also .Parent? E.Parent wär in deinem Beispiel B ...
edit: grad nachgeschaut. Parent gibt es. TreeView.SelectedNode.Parent dürfte in deinem fall die TreeNode B zurückgeben
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 01.12.10 22:00 
In meiner TreeView ist ein Ordner mit seinen Unterordnern und dessen UNterordnern, etc.
Mein Ziel ist es den Pfad vom untersten Unterordner herauszufinden, indem ich:
den Namen vom Parent + den Namen des gerade seletierten Nodes zurückgebe, und erhalte so von allen Nodes den Pfad;)
Nur müsst ich dazu allen Nodes den Namen ändern. aber wie?
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mi 01.12.10 22:05 
könntest du mal ein konkretes beispiel machen? verstehe das grade nicht...
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 01.12.10 22:10 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
private void UpdateChildren(TreeNode node)
        {
            foreach (TreeNode treeNode in node.Nodes)
            {
              node.Name = node.Text + ;
                UpdateChildren(treeNode);
            }
        }

geschafft. ;)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
private void UpdateChildren(TreeNode node)
        {
            foreach (TreeNode treeNode in node.Nodes)
            {
              node.Name = node.Text + node.Parent.Text; <--hier gibts aber einen Fehler.. :/
                UpdateChildren(treeNode);
            }
        }


Moderiert von user profile iconNarses: C#-Tags hinzugefügt
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mi 01.12.10 22:15 
überleg mal, was Node.Parent für einen Wert hat, wenn Node der oberste Knoten ist, also gar keinen Parent hat ;)

Für diesen Beitrag haben gedankt: robby_robbt
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 01.12.10 22:36 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
void Button1Click(object sender, EventArgs e)
    {
      TreeNode tn = tvList.TopNode;
      UpdateChildren(tn);
    }
    
private void UpdateChildren(TreeNode node)
    {
      if(node.Text != "Main") {
        foreach (TreeNode treeNode in node.Nodes)
        {
          node.Text = "" + node.Text + node.Parent.Text.ToString();
          UpdateChildren(treeNode);
          MessageBox.Show("" + node.Name);
        }
      } else if(node.Text == "Main") {
        node.Name = "" + Directory.GetCurrentDirectory();
      }
    }


Was mach ich bloß falsch?! :( grade eben ists noch gegangen..

Moderiert von user profile iconNarses: I- durch C#-Tags ersetzt
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 01.12.10 22:58 
Hm, fangen wir lieber nochmal mit dem Ablaufplan an:
  1. Ist der Knoten der Wurzelknoten?
    • Ja: Der Text soll das aktuelle Verzeichnis sein.
    • Nein: Der Text soll der Text des Parents plus der eigene Text sein.
  2. Führe Schritt 1 und 2 bei allen Kindknoten durch.
Schreib die Methode am besten nochmal neu. Übrigens kannst du mit node.Parent == null ganz einfach überprüfen, ob ein Knoten der Wurzelknoten ist.

Desweiteren sollte die Verwendung von Directory.GetCurrentDirectory() wohl überlegt sein. Ist sie das?

PS: Bitte schließe deine Quelltexte in <span class="inlineSyntax">{PROTECTTAGe2e40b88a3857f49745bb30a6bb9d732}</span> ein. Danke :)

Für diesen Beitrag haben gedankt: robby_robbt
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 01.12.10 23:13 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
    void Button1Click(object sender, EventArgs e)
    {
      TreeNode tn = tvList.TopNode;
      UpdateChildren(tn);
    }
    
    private void UpdateChildren(TreeNode node)
    {

      if(node.Parent == null) {
        node.Name = "" + Directory.GetCurrentDirectory();
        foreach (TreeNode treeNode in node.Nodes)
        {
          tsslC4Manager.Text = node.Text;
          UpdateChildren(treeNode);
        }
      } else {
        foreach (TreeNode treeNode in node.Nodes)
        {
          tsslC4Manager.Text = node.Text;
          node.Name = node.Name + node.Parent.Text.ToString();
          UpdateChildren(treeNode);
        }
      }
    }

Hab es so versucht.. Tut mir leid, komm leider nicht viel weiter.. :(
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.12.10 06:55 
Wenn du da eine Ordnerstruktur darstellen willst:
  • Hast du denn die Knoten schon erstellt?
  • Es wäre wohl sinnvoller, die Unterknoten erst beim Aufklappen zu erstellen und zu benennen (sonst dauert es ewig bei vielen Unterordnern)
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 02.12.10 15:30 
also was ich habe:
-A
-B
---C
------D
------E
---F


was ich haben möchte: ^^
-A
-B
---BC
------BCD
------BCE
---BF


Also soll Jeder Knoten den Namen vom Parent-Knoten + den eigenen Namen hinten Dran haben.
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Do 02.12.10 16:31 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
void Button1Click(object sender, EventArgs e)
    {
      TreeNode tn = tvList.TopNode;
      UpdateChildren(tn);
    }
    
    private void UpdateChildren(TreeNode node)
    {

      if(node.Parent == null) {
        node.Name = Directory.GetCurrentDirectory();
        
        foreach (TreeNode treeNode in node.Nodes)
        {
          
          UpdateChildren(treeNode);
        }
      } else {
          tsslC4Manager.Text = node.Text;
          node.Name = node.Parent.Name + node.Name;
        foreach (TreeNode treeNode in node.Nodes)
        {
          
          UpdateChildren(treeNode);
        }
      }
      node.Text =node.Name;
    }

versuch mal so. gebe aber keine garantie, das es funktioniert :D

Für diesen Beitrag haben gedankt: robby_robbt
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 02.12.10 17:42 
Danke hat funktioniert. ;)
Wie überprüfe ich eigentlich ob
-A
---B
---C
---D
A ein "Child-Node" enthält, dessen Namen "C" ist?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.12.10 17:49 
Alle ChildNodes durchgehen und nachschauen?

Für diesen Beitrag haben gedankt: robby_robbt
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 02.12.10 20:48 
user profile iconhuuuuuh hat folgendes geschrieben Zum zitierten Posting springen:
versuch mal so. gebe aber keine garantie, das es funktioniert :D

Naja, die Schleifen kann man aber auch zusammenpacken:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
void Button1Click(object sender, EventArgs e)
    {
      TreeNode tn = tvList.TopNode;
      UpdateChildren(tn);
    }
    
    private void UpdateChildren(TreeNode node)
    {
      if(node.Parent == null)
        node.Name = Directory.GetCurrentDirectory();
      else {
          tsslC4Manager.Text = node.Text;
          node.Name = node.Parent.Name + node.Name;
      }

      node.Text =node.Name;

      foreach (TreeNode treeNode in node.Nodes)
      {   
        UpdateChildren(treeNode);
      }
    }