VisualC++ 08: TreeView



  • Hey

    Ich möchte Objekte von Klassen in einer TreeView anzeigen lassen. Die Struktur wäre die folgende:

    Labor Nummer
     + Gruppenname 1
      + Teilnehmer 1
      ...
      + Teilnehmer n
     ...
     + Gruppenname n
      + Teilnehmer 1
      ...
      + Teilnehmer n
    ...
    Labor Nummer n
     ...
    

    Ich bekomme zwei Ebenen bereits hin (also den Hauptstamm + einen Unterstamm). Mehr aber nicht. Steh da ein wenig auf der Leitung. Blöderweise hilft google und msdn nicht sehr viel weiter weil die Codebeispiele oftmals nicht Funktionieren. Zum Beispiel mag

    TreeNode * nd1; // new Node
    

    nicht funktionieren, dafür funktioniert
    [cpp|TreeNode^ nd1; // new Node[/cpp]
    1a. Man muss also Ableiten... Warum auch immer sich das im Laufe der Zeit geändert hat.

    Mit dem folgenden Code bekomme ich den Ebenen Test schon mal hin (die Klassen sind noch nicht ganz fertig 😉 und das verschachteln der einzelnen Klassen (Laborreservierungssystem -> Labore -> Gruppen -> Studenten) tuts noch nicht so ganz.
    Keine Sorge, das ist weder eine Hausaufgabe noch was kommerzielles. Wir haben in Software Engineering so ein System ohne GUI Programmiert und ich wollte das ganze nun für mich mit GUI Programmieren, aus zwei Gründen: 1. Wieder reinkommen in C++ und OOP und 2. Um das GUI entwickeln zu erlernen.

    Ich hoffe mich kann einer verstehen und mir weiter helfen 🙂

    Grüße 🙂

    Edit: Code vergessen

    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {			 
    	 TreeNode^ ParentNode1;
    	 ParentNode1 = treeView1->Nodes->Add(textBox1->Text);
    	 ParentNode1->Nodes->Add("Gruppenname: "+textBox7->Text);
    	 ParentNode1->Nodes->Add("Maximale Teilnehmer: "+textBox2->Text);
    	 ParentNode1->Nodes->Add("Anzahl Gruppen: "+textBox2->Text);
    	 ParentNode1->Expand();
    		 }
    

    Edit2: Habs

    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {			 
    	 TreeNode^ ParentNode1;
    	 ParentNode1 = treeView1->Nodes->Add(textBox1->Text);
    	 ParentNode1->Nodes->Add("Gruppenname: "+textBox7->Text);
    	 ParentNode1->FirstNode->Nodes->Add("Test");
    	 ParentNode1->Nodes->Add("Maximale Teilnehmer: "+textBox2->Text);
    	 ParentNode1->Nodes->Add("Anzahl Gruppen: "+textBox2->Text);
    	 ParentNode1->Expand();
    
    		 }
    

    In einem Anflug von Geistiger erhabenheit 🕶



  • Oorim schrieb:

    1. Wieder reinkommen in C++ und OOP

    Wirklich C++? Das sieht mir eher nach C++/CLI aus:

    TreeNode^ nd1
    

    Aber ich sehe dein Problem nicht ganz? Schreib dir doch eine Knotenklasse, die wiederum Zeiger auf andere Knoten hat.



  • Ich habe bisher nur Konsolenanwendungen geschrieben. Von daher kann es sein das ich hier Dinge als C++ bezeichne die vll was anderes sind.

    Mein Problem war einen Knoten zu generieren der wiederrum Kinder hat die wiederrum Kinder haben. Das hab ich mit dem letzten Code hinbekommen 🙂



  • Dieser Thread wurde von Moderator/in Marc++us aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • http://msdn.microsoft.com/de-de/library/system.windows.forms.treenodecollection.add.aspx

    Add liefert ein TreeNode zurück an den Du wiederum anhängen kannst. Das machst Du Doch auch bereits^^

    TreeNode^ ParentNode1;
    ParentNode1 = treeView1->Nodes->Add(textBox1->Text);
    ParentNode1->Nodes->Add("Gruppenname: "+textBox7->Text);

    TreeNode^ ParentNode1;
         ParentNode1 = treeView1->Nodes->Add(textBox1->Text);
         ParentNode1 = ParentNode1->Nodes->Add("Gruppenname: "+textBox7->Text);
         ParentNode1->Nodes->Add("Neue ebene: "+textBox7->Text);
    


  • Ja richtig. Wie gesagt, 10s nach meinem Post hat sich das Thema schon wieder erledigt gehabt weil ich gemerkt hab das das so funzt 🙂

    ParentNode1->FirstNode->Nodes->Add("Test");
    

    Damit kommt ich dann in die dritte Ebene weil die "FirstNode" die Node eins hinter dem Stamm ist (also quasi die Zweite)... Blöd zu erklären aber ich glaube ich weis wies Funktioniert.



  • eine Frage hab ich doch noch

    | Stamm 1
    | + Node 1
    |  + Node 1.1
    |  + Node 1.2
    | + Node 2
    

    Das klappt soweit. Aber wenn ich eine Node 2.2 hinzufügen will (mit NextNode) schmiert mir das Programm immer ab. Wie füge ich also jetzt am sinnigsten noch Node 2(.1, .1, ..., .n) und Node 3(.1, .2, ... , .n) hinzu?

    Grüße



  • Node2.Nodes.Add(...)
    

    Btw.: Schmiert ab ist keine brauchbare Beschreibung - erst recht nicht wenn der Codeausschnitt und die dazugehörige Exception fehlt.



  • Danke ich werd in Zukunft drauf achten 🙂

    Edit:

    TreeNode^ ParentNode1;
    	 ParentNode1 = treeView1->Nodes->Add(textBox1->Text);
    	 ParentNode1->Nodes->Add("Gruppenname: "+textBox7->Text);
    	 ParentNode1->FirstNode->Nodes->Add("Test");
    	 ParentNode1->FirstNode->Nodes->Add("Maximale Teilnehmer: "+textBox2->Text);
    	 ParentNode1->FirstNode->Nodes->Add("Anzahl Gruppen: "+textBox2->Text);
    	 ParentNode1->Nodes->Add("Test");
    	 ParentNode1->NextNode->Nodes->Add("Test");
    

    Ohne die letzte Zeile gehts noch, mit der letzten Zeile lässt es sich Ausführen und nach Klick auf den button heist es

    Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in System.Windows.Forms.dll aufgetreten.

    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Heist für mich soviel wie: NextNode weis nich worauf es zugreifen soll. Ich steh ein wenig auf dem Schlauch ^^



  • du greifst mit

    ParentNode1->NextNode
    

    auf den nächten knoten auf der ebene von ParentNode1.
    da dort aber scheinbar keiner ist gibts ne exception.

    -parent
       -name
          -test
          -teiln
          -grp
       -test
    <--- nix
    

Anmelden zum Antworten