Autor Beitrag
coolace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Do 24.09.09 17:31 
Hy,

ich bin seit Tagen wieder mal am googeln und mit der Boardsuche beschäftigt und komme nicht weiter :-(
Ich habe eine Treeview mit einer Root Node und unterschiedlich tiefen Child Notes
z.B.
-Node1
--Node2
---Node22
--Node2
--Node3
---Node33
usw.
Sobald ich das Programm starte ladet er die Struktur aus einer XML Datei danach versuch ich mit Hilfe
folgendem Codes das der Wurzelnode 1 bestimmtes Bild zugewiesen bekommt, das jeder Node der mit .pdf
endet ein bestimmtes Bild zugewiesen bekommt und die wo nicht unter die Kategorie Wurzelnode oder .pdf
fallen ein bestimmtes Bild zugewiesen bekommen
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
foreach (TreeNode temp in treeview.Nodes)
{
  if (temp.Text.Trim().EndsWith(".pdf"))
  {
    treeview.ImageIndex = 1;
  }
  if (!temp.Text.Trim().Equals("RootNode"))
  {
    treeview.ImageIndex = 2;
  }
  else
  {
   treeview.ImageIndex = 0;
   }
}

Was mach ich hier falsch, alle bekommen nur das bild mit dem Index 0 zugewiesen aber nicht so wie ich das will

Gruß

Coolace
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 24.09.09 17:37 
Zitat:
Was mach ich hier falsch,


Du setzt den ImageIndex des TreeViews, du solltest aber den ImageIndex des TreeNodes setzen.
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Do 24.09.09 17:45 
Hy,

vielen Dank für deine Hilfe, aber irgendwie klappt das mit
den Unternodes immer noch nicht hab statt
treeview.ImageIndex = 1; daraus treeview.SelectedNode.ImageIndex = 1
gemacht aber der beachtet das nicht ?
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 24.09.09 18:01 
Hallo,

wie Ralf gesagt hast, sollst du den ImageIndex von dem jeweiligen Node verändern.

Weißt du den was die Eigenschaft SelectedNode ist?
Hast du mal die msdn oder schnell Hilfe dazu gelesen?
Wie kommst du auf die Funktion?

Weiß einfach der Eigenschaft ImageKey von dem jeweiligen TreeNode den gewünschten ImageIndex zu.

z.B.

ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (TreeNode treeElement in treeview.Nodes)
{
   treeElement.ImageIndex = ImageIndexByText(treeElement.Text.Trim());
}


Gruß Daniel
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Do 24.09.09 18:28 
Hy,

Ja, die SelectedNode ist der jeweils gerade ausgewählte Knoten, weiß zwar nicht ob das auch
gilt wenn er das mit der foreach schleife durchläuft.

Hab auch schon paar mal die msdn durchsucht nach der passenden Eigenschaft, aber ich find
Treeview ist irgendwie kein leichtes Thema.

Find die Klasse bei mir nicht ImageIndexByText(..); ?
Hab es mit treeElement.ImageIndex = Zahl ; probiert aber das Ergebnis passt
irgendwie nicht ?

Laut Debugger nimmt er nur den RootNode die Childnodes aber nicht

sorry und danke für die Hilfe
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 25.09.09 08:20 
Hallo,

ImageIndexByText stellt eine Methode dar. Den Inhalt hattest du ja schon ...

Ich hab das mal für dich zusammen gefügt. Ich hoffe du machst dir troztdem genug gedanken, so dass du auch verstehst was du tust.

Bei Fragen kannst dich gerne melden.

Gruß Daniel

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
        enum ImageIndex
        {
            PDF = 1,
            Root = 2,
            Default = 0
        }

        private void SetImageKeys(TreeView treeView)
        {
            foreach (TreeNode treeNode in treeView.Nodes)
            {
                treeNode.ImageIndex = ImageIndexByText(treeNode.Text.Trim());
            }
        }

        private int ImageIndexByText(string text)
        {
            if (text.EndsWith(".pdf"))
            {
                return (int)ImageIndex.PDF;
            }
            else if (text.Equals("RootNode"))
            {
                return (int)ImageIndex.Root;
            }

            return (int)ImageIndex.Default;
        }
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Fr 25.09.09 11:47 
Hy,

erstmal danke für die Hilfe.
Wenn ich das richtig verstehe hast du einen eigenen Datentyp mit den passenden Indexen erstellt.
Und übergibst der Funktion die den passenden int Wert zurückliefert nur den Text und die sucht
den passenden Index mit dem Bild heraus.

Soweit hab ich das kapiert, was ich nicht herausgefunden habe ist warum er nur den RootNode
in der foreach Schleife durchgeht aber sich nicht dazu bewegen lässt auch die darunter liegenden
Children Nodes anzuschauen.

Meine Hierachie besteht aus einem RootNode und divers verschachelten Childnodes.
Wie komm ich also an alle Childnodes ran ?

Bau den Treeview so auf in den entsprechenden Ereignissen
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
1 Ebene
kindknoten = new TreeNode(name);
kindknoten.Text = name;
Rootnode.Nodes.Add(kindknoten);

weitere Ebenen je nach dem welcher Knoten ausgewählt ist
kindkindknoten = new TreeNode();
kindkindknoten.Text = uname;
treeview.SelectedNode.Nodes.Add(kindkindknoten);

danke und gruß

Coolace


Zuletzt bearbeitet von coolace am Fr 25.09.09 12:00, insgesamt 1-mal bearbeitet
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 25.09.09 11:59 
Axo, nun verstehe ich dein Problem - du hast mehre "Unter"-Ebenen :)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        private void SetImageKeys(TreeView treeView)
        {
            SetImageKeys(treeView.Nodes);
        }

        private void SetImageKeys(TreeNodeCollection treeNodes)
        {
            foreach (TreeNode treeNode in treeNodes)
            {
                SetImageKeys(treeNode.Nodes);

                treeNode.ImageIndex = ImageIndexByText(treeNode.Text.Trim());
            }
        }


Der Durchlauf eines Baumes heißt auch: Traverse (Für deine Google-Suche).

Gruß Daniel


Zuletzt bearbeitet von danielf am Fr 25.09.09 12:03, insgesamt 1-mal bearbeitet
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Fr 25.09.09 12:01 
ja das ist noch mein letztes Problem :-)
das andere hab ich anhand des Codes verstanden.
Wie komm ich an die unteren ?

Danke und Gruß

Coolace
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Fr 25.09.09 12:06 
Cool des funktioniert super.
vielen vielen Dank für eure Hilfe und Geduld.
Damit ich das auch kapiere, an die unteren Nodes komm ich nur
über die TreeNodeCollection ?
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 25.09.09 13:03 
ja genau. Du kommst von einer Ebene über die Nodes Eigenschaft auf die nächst tiefere Ebene.

www.java-forum.org/j...ktur-durchgehen.html

Gruß
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Fr 25.09.09 13:22 
Ideal, danke für die Antworten und die Erklärungen
I god it :-)

Gruß

Coolace