TreeView-Nodes-Eigenschaften beibehalten

MAN

Erfahrenes Mitglied
Hallo,

wie kann ich es machen, dass mein Objekt der Klasse TreeNode die Eigenschaften beibehält, welche Nodes gerade mit einem Minus ("-") geöffnet sind?

Ich bräuchte so eine Art Automatisation, wo ich einem TreeView einfach mit TreeView.Nodes.Add() meines aktuellen Nodes übergebe und der TreeView die dann so aufgebaut anzeigt, wie sie auch reingeschrieben wurden.

Falls die Frage etwas unverständlich sein sollte, einfach nochmal nachfragen - ist kompliziert zu erklären!


mfG,
MAN
 
Nun ja, habe es mittlerweile schon etwas anders lösen können, wenn auch das noch nicht die Lösung ist! :(

Zur Erklärung:

ich habe zwei Formulare (eigentlich 30, aber fürs Beispiel nehmen wir mal 2 :)), und dazu noch eine globale statische Klasse.

Auf dem ersten Formular habe ich einen TreeView mit einigen TreeNodes.

Wenn der User nun die TreeNodes aufklappt mit dem Plus => Minus, dann sieht er ja schließlich die ChildNodes.

Wenn er dann anschließend auf einen ChildNode klickt, soll er genau diese TreeView-Struktur in die andere Form rüberbringen.

Dazu noch ein Hinweis: die Formulare (also alle beide bzw. alle 30) werden beim Start des Programms schon geladen und nur noch mit Klick auf einen ChildNode angezeigt.

Die globale Klasse wollte ich zum Transfer der TreeNode-Struktur benutzen, wobei diese Struktur auch beim Aufruf durch Klick der ChildNodes übergeben werden könnte.

Das ist die Theorie, aber ich bekomm es einfach nicht hin, das auch praktisch umzusetzen. :(

Wenn ich mit TreeView.Nodes.Add() Nodes hinzufüge, dann zeigt er die ja nicht so aufgeklappt an, wie sie auf dem ersten Formular zu sehen waren!

Ich hoffe das war jetzt ein bißchen verständlicher erklärt.

Vielleicht kannst du, oder irgendwer mir einen kleinen Denkanstoß geben, wie ich das realisieren könnte!


Vielen vielen Dank!


mfG,
MAN
 
Also kann ich davon ausgehen, dass das transferieren der Nodes nicht das Problem ist, sondern lediglich, dass er die übertragenen Nodes nicht aufklappt?

Wenn ich das so richtig sehe, dann musst du im zweiten TreeView nur mehr die neuen Nodes durchgehen und sie aufklappen, das du wie folgt machen kannst:

Code:
treeView.Nodes[3].Expand();

3 wäre die 3. Node gesehen von der Root-Node. Du musst bedenken, dass jede Childnode wieder bei 0 beginnt und raufzählt. Just for info.
 
Joah, das würde dann kompliziert werden... man müßte sich dann eventuell ne rekursive Funktion schreiben, denn bei 30 Formularen (und somit auch die Anzahl der ChildNodes) wird das hardcodieren bisserl redundant... :rolleyes:

Aber vielen Dank für den Tipp!


mfG,
MAN
 
War auch nur als Beispiel gedacht um ersichtlich zu machen, dass es sich hierbei um einen Index handelt.

Ohne Rekursion wirst hier vermutlich eh nicht auskommen.
 
Jup, dann Donnerstag mal in der Arbeit probieren, hing heut schon den ganzen Tag an diesem Problem :rolleyes:


mfG;
MAN
 
Könntest du mir eventuell mal ein Beispiel-Code geben, wie ich das anstellen kann?

Bin gerade mal wieder am verzweifeln, da es nicht so funktioniert, wie ich mir das vorgestellt hatte.

Habe im Moment folgendes:
Code:
Code von CForms.cs

private static TreeNode m_cTreeViewNodes;

public static TreeNode TreeNodes
{
	get
	{
		return m_cTreeViewNodes;
	}
	set
	{
		m_cTreeViewNodes = value;
	}
}
public static void SetExpandedNodes( ref TreeNode cCurTreeNode )
{
	if( cCurTreeNode.IsExpanded )
	{
		cCurTreeNode.Expand();
				
		for( int i = 0; i < cCurTreeNode.Nodes.Count; i++ )
		{
			SetExpandedNodes( cCurTreeNode.Nodes[i] );
		}
	}
}
Und dann will ich von den Formen das so aufrufen:
Code:
Code von frmFormular.cs

if( this.tvwMain.Nodes.Count == 0 )
{
	this.tvwMain.Nodes.Add( CForms.TreeNodes );
}

CForms.SetExpandedNodes( this.tvwMain.Nodes[0] );
Das heißt, es werden die Nodes von CForms hinzugefügt, wenn keine Nodes vorhanden sind, und dann eben ausgeklappt.

Das Problem dabei ist, wenn ich die Methode dann auf einer zweiten Form ausführe kommt dann folgender Fehler:

System.ArgumentException: Das Element "test" kann nur an einer Stelle hinzugefügt oder eingefügt werden. Entfernen Sie es von der aktuellen Position oder klonen Sie es.

Wobei "test" in diesem Fall ein Node-Text ist.

Ich versteh einfach nicht, warum dieser Fehler kommt :(


mfG,
MAN
 
Zurück