[C#] Frage zu den TreeNodes

corey

Ensign
Registriert
März 2005
Beiträge
254
Hi,

Hab wieder mal zu c# eine Frage: ;)

ch habe in meiner Applikation ein TreeView(Name="tVGruppen") & ein Panel mit verschiedenen Labels. Nun möchte ich in ein Label den Namen bestimmter Unternodes anzeigen lassen (bei einem Klick auf das bestimmte Node). Ich habe nun ein Ereignis geschrieben:

private void tvGruppenSelectedNode_Click(object sender, System.EventArgs e)
{

lblGruppenÜberblickLeftNameValue.Text = tVGruppen.SelectedNode.Text;
}

Jedoch werden nun immer der Name des angeklickten Nodes im Label angezeigt. Ich möchte nun, dass es nur bei bestimmten Nodes angezeigt wird:

- RootNode
--1.NodeGruppe
---2.NodeGruppe

-> Ich möchte, dass die Namen immer bei der 1. Node Gruppe angezeigt werden.

Vielen Dank!
 
Erstmal ist es extrem schwer deinen Ausführungen zu folgen. Bitte schreib doch nächstes mal etwas strukturierter:

Also. Du hast folgendes.

1x Panel
1x Label (lblGruppenÜberblickLeftNameValue)
1x Treeview (tVGruppen)

Nun hast du ein Event geschrieben und das an eine Node oder an das Treeview gebunden?

Du willst jetzt was genau? Den Namen der selektierten Node in dem Label anzeigen lassen oder nicht? Was anders macht dein Event nicht.

-RootNode
--1.NodeGruppe
---2.NodeGruppe

-> Ich möchte, dass die Namen immer bei der 1. Node Gruppe angezeigt werden.

Das musst du mir nochmal erklären.


edit: Also soweit ich das verstanden habe, musst du dir eine eigene Node Klasse schreiben und dann ein Flag hinzufügen, welches dir signalisiert, ob anzeigen oder nicht. Dann brauchst du eine rekursive Methode, die die unternodes durchgeht (je nachdem wie weit du scannen willst) und auf dieses Flag prüft, ob es angezeigt werden soll oder nicht.

Soweit korrekt?
 
Zuletzt bearbeitet:
Hi frow,

Genau das hab ich:

1x Panel
1x Label (lblGruppenÜberblickLeftNameValue)
1x Treeview (tVGruppen)

Das Panel spielt dabei keine grosse Rolle.

Die Struktur vom tVGruppen sieht so aus:

-RootNode
--1.NodeGruppe
---2.NodeGruppe

Ich möchte nun in das Label blGruppenÜberblickLeftNameValue der Name des angeklickten Nodes aus der 1. NodeGruppe schreiben.

Ist diese Erkläre nun gut so?

Weisst du wie ich das realisieren kann?

Danke.
 
Also du willst haben:

Eine Routine, die dir die Namen bestimmter Unternodes anzeigt, wenn du eine übergeordnete Node anclickst? Dann schau dir nochmal meinen "edit" von oben an.

TreeNode vererben und eine neue MyTreeNode schreiben. Da einfach einen bool Wert einfügen, z.B. showInLabel = false. Da dann einen getter/setter für schreiben.

Bei allen Nodes die angezeigt werden sollen, dieses Feld auf true setzen und dann in einer rekursiven Schleife alle Nodes und ggf. Unternodes auf dieses Feld hin überprüfen. Wenn es den Wert "true" hat, einfach den Namen in das Feld schreiben.
 
Sorry hab zuerst dein edit: nicht gelesen.

OK, hab dein edit verstanden...jedoch ist dies recht schwer zu realisieren..aber ich probiere es ...
 
Ja hatte dein Problem später erst voll erfasst, daher der Edit :)
Nein ist nicht so schwer.

Dein Event kannst du ja behalten. Da kommt dann die Schleife rein.

Du brauchst

- Vererbung (Also eine neue Klasse mit den Eigenschaften der Treenode Klasse)
- getter/setter
- rekursive Schleife

Alles Dinge, die in jedem guten Tutorial (zu finden in Google) beschrieben werden.
 
Vielen Dank,

Ich probiere es nun mal...;) wenn ich es schaffe werde ich hier die lösung posten;)
 
hehe:p.....
 
OK, ich habs etwas anders gemacht, als du gesagt hast flow....ich bin mit den ganzen subklassen und so nicht sooo weit gekommen, hier die subklasse die ich erstellt habe:

using System;
using System.Windows.Forms;

namespace testAPP
{
/// <summary>
/// Zusammenfassung für CSubTreeView.
/// </summary>
public class CSubTreeView : TreeView
{
private bool _showInLabel;

public CSubTreeView(bool showInLabel) : base()
{
_showInLabel = showInLabel;
}

public bool showInLabel
{
get{return(_showInLabel);}
set{_showInLabel = value;}
}
}
}

und nun das ereignis so definiert:

private void tvGruppenSelectedNode_Click(object sender, System.EventArgs e)
{

if(tVGruppen.SelectedNode.GetType().ToString() == "testAPP.CSubTreeNode")
{

lbltest.Text = tVGruppen.SelectedNode.Text;

}

}

so kann man dann normale treenodes oder csubtreenode's definieren...ich überprüfe anschliessend im ereigniss von welchem typ das node ist. wenn es vom typ csubtreenode ist, wird es ins label geschrieben.
 
Zurück
Oben