Laden...

Aus einer ListView ein TreeView Element selektieren

Erstellt von axelfxxx vor 17 Jahren Letzter Beitrag vor 17 Jahren 5.301 Views
axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren
Aus einer ListView ein TreeView Element selektieren

Hi @ all,

mal wieder eine Frage:

Ich habe den Windows Explorer nachgebastelt. Auf der Linken Seite befindet sich die Baumansicht, auf der rechten die OrdnerAnsicht. Alles funktioniert bestens. Nun folgt aber noch eine Aufgabenstellung:

Wenn ich auf ein ITEM in der ListView klicke, soll automatisch in der TreeView der Pfad aufgeklappt werden.

Ich bekommen den Pfad der Listview mit:

this.ListView1.FokusedItem.Tag.ToString()

(z.B.: C:\windows\blabla.datei)

Als Gedanke: Ich habe versucht, den Pfad in ein StringArray zu speichern, aber weis nun nicht, wie ich diesen String nu in der TreeView suche !?

Hat jemand vielleicht ein bisserl Code oder Hilfe für mich ?

---- >
Keine Signatur 😉

T
327 Beiträge seit 2006
vor 17 Jahren

Gehe mal davon aus, dass du VS 2005 verwendest.

Als 1. musst du darauf achten, dass du jedem TreeNode in deinem TreeView neben dem Text ein Value zuweist. Der Text wird denke ich mal der Ordnername sein, für das Value nimmst du diesen ebenfalls.

So in etwas sollte es dann funktionieren:


TreeNode nd;
string pfad = @"c:\windows\system32\x.bin";
string ordnername = string.Empty;

pfad = pfad.Substring(0, pfad.Length - (pfad.Length - (pfad.LastIndexOf(@"\") + 1)));
			
while(pfad.IndexOf(@"\") != -1)
{
  ordnername = pfad.Substring(0, pfad.IndexOf(@"\"));

  if(ordnername.IndexOf(":") != -1)
    nd = this.treeView1.Nodes[ordnername];
  else
    nd = nd.Nodes[ordnername];
				
  pfad = pfad.Remove(0, ordnername.Length + 1);
}

nd.Expand();

Habs leider nicht probieren können, weil ich grad kein 2005er da hab...

Kurze Erklärung:

  1. Vom Pfad den Dateinamen abschneiden, das letzte "" muss dran bleiben!
  2. In der while Schleife immer prüfen ob noch ein "" und damit ein Ordner enthalten ist.
  3. Den Namen des Ordners der obersten Ebene im Pfad ermitteln.
  4. Wenn ":" enthalten, dann ist das die oberste Ebene (Laufwerk) und das Node-Objekt muss direkt vom TreeView geholt werden.
    Wenn kein ":" enthalten ist hast du einen Unterordner, der unter dem vorher ermittelten Knoten nd hängt.
  5. Vom gesamten Pfad vorne den grade bearbeiteten Ordnernamen abschneiden inkl. "", daher das "+1"
  6. Wenn die Schleife rausspringt hast du genau den Knoten in deinem TreeView gefunden, in dem die Datei liegt.
  7. Mit nd. Expand() wird genau dieser Knoten aufgeklappt und der Inhalt des Ordners wird angezeigt.

Hoffe das hilft....

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo telnet,

kleiner Hinweis: statt Pfade als String zu manipulieren, sollte man immer die Methoden der Path-Klasse verwenden. Siehe dazu auch die Diskussion in HTML Datei öffnen

herbivore

215 Beiträge seit 2004
vor 17 Jahren

Du könntest auch 'einfach' im ListViewItem.Tag den Treenode hinterlegen, der diesem Eintrag entspricht.

axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren

Hi, @ Alle Helfer 😉

Hab den Code von TELNET mal für mich mal so umgeschrieben:

(Ich nutze MS C# Express g)


try
            {
                string pfad = this.explorer.SelectedItems[0].Tag.ToString(); // ListView
                string ordnername = Path.GetFullPath(pfad); 

                pfad = pfad.Substring(0, pfad.Length - (pfad.Length - (pfad.LastIndexOf(@"\") + 1)));

                while (pfad.IndexOf(@"\") != -1)
                {
                    ordnername = pfad.Substring(0, pfad.IndexOf(@"\"));

                    if (ordnername.IndexOf(":") != -1)
                        node = this.explorer_links.Nodes[ordnername]; // Explorer_links = TreeView
                    else
                        node = node.Nodes[ordnername];

                    pfad = pfad.Remove(0, ordnername.Length + 1);
                }
                node.Expand();
            }
            catch(System.Exception err)
            {
                MessageBox.Show("Fehler" + err.ToString());
            }

Ich hab vorher schon eine TreeNode node deklariert !!!

Jetzt krieg ich die ganze Zeit eine NullReferenceException !?

An diesem Problem häng ich schon fast 3 Monate gg

Mach ich mal wieder irgendwas falsch ??

---- >
Keine Signatur 😉

49.485 Beiträge seit 2005
vor 17 Jahren
axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren

Guten Morgen, herbivore

was diese Exception bedeuted weis ich ! Aber ich suche nach der Ursache, warum ich diese Meldung kriege. Ich mach noch nicht allzu lange mit C#, kenne also manche Feinheiten noch nicht.

mfg
Alex

---- >
Keine Signatur 😉

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo axelfxxx,

in dem genannten FAQ Beitrag wird beschrieben, wie man die Ursache ermittelt und behebt. Lies bitte alles noch mal ganz genau.

herbivore

T
327 Beiträge seit 2006
vor 17 Jahren

Hallo herbivore,

danke für den Tipp... werd ich mir gleich mla ansehen und für das nächste Mal merken....