Treeview-Expand->Darstellung

30/03/2008 - 09:14 von Werner Perplies | Report spam
Guten Morgen,

Ich möchte in einem Treeview immer gerade den Knoten expandieren, unter dem
sich die Maus befindet, Knoten die sich nicht im ausgewàhlten Zweig
befinden und Knoten gleicher Ebene sollen automatisch geschlossen werden.

Das Ganze soll im zweiten Anlauf natürlich auch bei einer Navigation über
die Tastatur funktionieren.

Ich bin mir zur Zeit auch noch nicht über die Einzelnen Grenzsituationen im
Klaren.

1. Frage:

Gibt es so etwas fertig?

Zweite Frage:
Was mache ich hier falsch?

Im Moment mache ich Folgendes:

private void AnzeigenTreeViewTv_NodeMouseHover(object sender,
TreeNodeMouseHoverEventArgs e)
{
this.AnzeigenTreeViewTv.BeginUpdate();
if (LastNode != null)
{
LastNode.Collapse();
}
e.Node.Expand();
if (LastNode != e.Node.Parent)
{
LastNode = e.Node;
}
// LastNode = e.Node;
this.AnzeigenTreeViewTv.EndUpdate();
}

...und habe schon einen ganzen Sack voller Probleme:
1. Das Auffàlligste:

Ich habe zur Zeit die folgende Struktur:
Knoten1
Knoten1.1
eins
zwei
drei
Knoten1.2
Knoten1.3
Knoten1.4
Knoten1.5
Knoten2
Knoten2.1
eins
zwei
drei
Knoten2.2
Knoten2.3
Knoten2.4
Knoten2.5
Knoten3

Nach Erstanzeige geschieht Folgendes:
Maus über Knoten1,2,3: -> keine Expansion:
nach Auswahl eines weiteren Knotens:
Maus über KnotenY: -> Expansion, aber Anzeige:
Knoten1
Knoten1
Konten1
Knoten1
Knoten1
Knoten1

Maus über (Sub)Knoten1:
Expansion:
eins
zwei
drei

2. Collapse finktioniert noch nicht, wie gewünscht.

3. Die Reaktion soll bei erst nach einer gewissen Zeit erfolgen:

Ich hoffe, ich habe das Problem erschöpfend beschrieben und bin für jede
Hilfe dankbar.


Werner
www.weepee.eu
 

Lesen sie die antworten

#1 Werner Perplies
30/03/2008 - 11:09 | Warnen spam
Am Sun, 30 Mar 2008 09:14:57 +0200 schrieb Werner Perplies:

ich habe mal etwas weiter experimentiert,:

private void AnzeigenTreeViewTv_NodeMouseHover(object sender,
TreeNodeMouseHoverEventArgs e)

this.AnzeigenTreeViewTv.BeginUpdate();
if (LU.Count > 0)
{
if (!(LU.Peek().Equals(e.Node)))
{
if (LU.Peek().Equals(e.Node))
{
// Do Nothing
}
else
{
// wenn der letzte node in der gleichen Ebene liegt,
// muss er geschlossen werden:
if (LU.Peek().FullPath.Replace(LU.Peek().Text, "") ! e.Node.FullPath.Replace(e.Node.Text, ""))
{
LU.Pop().Collapse();
}
else
{
if (NotElementOfBranche(LU, e.Node))
{
// nur wenn letzte Node nicht
// Teil des Pfades ist
if (e.Node.Nodes.Count > 0)
{
//
LU.Pop().Collapse();
}
}
}
}
e.Node.Expand();
LU.Push(e.Node);
}
}
else
{
if (LU.Count == 0)
{
LU.Push(e.Node);
e.Node.Expand();
}
}
this.AnzeigenTreeViewTv.EndUpdate();

Aber ich laufe immer wieder hier auf:

Knoten1
Knoten1
Konten1
Knoten1
Knoten1
Knoten1

Dies ist übrigens _kein_ Darstellungsproblem, wie ich zuerst vermutet habe,
sondern die Knoten haben nach dem Expandieren tatsàchlich den falschen
Inhalt.

Dadurch scheitert dann auch meine Logik zum Zusammenfalten von Knoten auf
gleicher Ebene.


Werner
www.weepee.eu

Ähnliche fragen