Laden...

TreeNode tauschen

Erstellt von spacebasic vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.519 Views
S
spacebasic Themenstarter:in
37 Beiträge seit 2006
vor 17 Jahren
TreeNode tauschen

Hallo,

Ich habe ein Problem mit den TreeNodes vertauschen (mal wieder?).
Und zwar möchte ich 2 übereinanderliegende Knoten in der gleichen Ebene vertauschen.

Ebene0
|--Knoten0
|--Knoten1
|--Knoten2
Ebene1
|--...

Wie oben gezeigt, soll Knoten1 nach oben und Knoten0 dann halt unter Knoten1, aber in der Ebene0 bleiben!

Probiert habe ich diesen Code (u.a.!!!). Ich verstehe nur nicht, warum der Knoten nicht wieder eingefügt wird!
Selektiert ist in diesem Code-Beispiel Knoten0.


TreeNode tn = this.trvStruktur.SelectedNode;								
int level = tn.Level;
if(tn.NextNode.Level == level)
{
        tn.Remove();
	tn.Nodes.Insert(tn.NextNode.Index,tn);
						
}

Was mache ich falsch??

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo spacebasic,

nach dem tn.Remove hat tn.NextNode nicht mehr den gewünschten Wert.

herbivore

S
spacebasic Themenstarter:in
37 Beiträge seit 2006
vor 17 Jahren

Hallo herbivore,

ok, das ist geklärt. Funktioniert mit vorheriger Abfrage (vor dem Löschen) des Index.
Nun aber habe ich das Problem in den Ebenen > 2. Wenn ich die Knoten dieser Ebenen vertauschen will, wird der Knoten gelöscht und in die Ebene darüber eingefügt!
So ganz hab ich das noch nicht verstanden!


TreeNode tn = this.trvStruktur.SelectedNode;
int idx = tn.NextNode.Index;
int level = tn.Level;				
if(level != 0)
{
	int pidx = tn.Parent.Index;

	this.trvStruktur.Nodes.Remove(tn);
	this.trvStruktur.Nodes[pidx].Nodes.Insert(idx, tn);
	this.trvStruktur.Focus();
}
else
{
	this.trvStruktur.Nodes.Remove(tn);
	this.trvStruktur.Nodes.Insert(idx, tn);
}

Vielleicht noch zum Verständnis: Alle Knoten werden manuell eingegeben, also nicht vorher im Designer!

Und wie zum Geier funktioniert der Index-Wert im Treeview? Nur Knotenbezogen?
Geht das nicht auch über das gesamte TV fortlaufend?

MfG

187 Beiträge seit 2005
vor 17 Jahren

soweit ich weiss kannst du nicht alle knoten durch gehen. Du musst jeden parent durch gehen. Zu lösen währe dieses problem mit einer sich selbst aufrufenden Methode

EDIT:

		TreeNode trNode = treeView1.Nodes[0].Nodes[0];  
		treeView1.Nodes[0].Nodes.Remove(trNode);  
		treeView1.Nodes[0].Nodes.Insert(1, trNode);  

Die Struktur meines Test ist folgende

Node0
->Node3
->Node4
->Node5
Node1
Node2

Und die drei zeilen machen folgendes.

Node0
->Node4
->Node3
->Node5
Node1
Node2

wie währe es mit diesem vorschlag?

S
spacebasic Themenstarter:in
37 Beiträge seit 2006
vor 17 Jahren

Hallo Vassili,

ich hab nicht ganz verstanden, auf was Du hinaus willst! Ich möchte ja auch nicht alle Knoten durchgehen.
Das tauschen wie Du es darstellst funktioniert ja in diesen Ebenen! Nur wenn das TV so aussieht (s.u.) eben nicht!
Ich meine das Tauschen von Knoten10 und Knoten11.

Ebene0
|--Knoten0
|--Knoten1
|--Knoten10
|--Knoten11

|--Knoten2

Wenn ich Knoten10 selektiere und nach unten schieben will, landet dieser nicht in Knoten1 unter Knoten11 sondern im Knoten2.

Dein Code ist leider zu starr, denn ich weiß nicht, wie tief die Verschachtelung später aussieht!

Trotzdem Danke für Deine Mühe

MfG

187 Beiträge seit 2005
vor 17 Jahren

Also. Ich hab das mal ausprobiert.

Ich habe zur Form ein Button hinzugefügt. Dieser enthält folgenden Code

TreeNode trParent = treeView1.SelectedNode.Parent;
TreeNode trNode = treeView1.SelectedNode;
int iIndex = trNode.Index;
trParent.Nodes.Remove(trNode);
trParent.Nodes.Insert(iIndex - 1, trNode);

dies bewirkt. dass beim klick auf den button der ausgewählte node in der gleichen hierarchie ebene um eine Position nach oben rutscht.

S
spacebasic Themenstarter:in
37 Beiträge seit 2006
vor 17 Jahren

Hey Vassili,

Du bist heute mein Held!
Es funktioniert so, wie Du es hast. Aber warum das mit meinem Code nicht funzt, ist mir ein Rätsel. Da sitze ich Stunden davor... und dann ist es wiedermal so einfach!

Naja, was solls! Irgendwann gehöre ich mal nicht mehr zu den Newbies!

Vielen Dank

Mfg