Laden...

Zusammenarbeit von Tree - und ListView

Erstellt von axelfxxx vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.499 Views
axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren
Zusammenarbeit von Tree - und ListView

Hi @ all

Wieder einmal eine Explorer Variante in C#:

Auf der linken Seite befindet sich die TreeView, die sämtliche Order und Laufwerke anzeigt, auf der rechten Seite eine Listview, die auch sämtliche Orderinhalte und Laufwerke beinhaltet. Die Auflistung von Links --> nach Rechts klappt: Klicke ich ein Element in der TreeView an, öffnet dich automatisch der PASSENDE Pfad in der Listview

So nun das Problem mit dem Andersherum. Wenn ich nun in der Listview ein Elemrt anklicken will, müßte sich in der TreeView auch automatisch der Pfad öffnen.

Ich hab mich schon echt verled Aber nichts passendes gefunden.

Über ein bisschen Hilfe währ ich euch echt dankbar.
(mit Quellcode kann ich mehr anfangen fg)

mfg
Alex

---- >
Keine Signatur 😉

379 Beiträge seit 2004
vor 17 Jahren

So ganz spontan würde ich sagen, nehme das SelectedItem des TreeView und suche in dessen Knoten nach dem Namen der in der ListView ausgewählt wurde, also z.B. "Ordner 1". Das agnze kannst du ja in einer Schleife vollführen, da die Namen ja eindeutig sind, sollte das klappen und relatif schnell gehen

ciao Anke

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

Thx erstma 😉

aber hast du "spontan" ein Stück Quellcode für mich, wie man das bewerkstelligt ? Und auf der anderen Seite: Muss nicht das SelectedIndex Event der **ListView **abgefragt werden ?

Alex

---- >
Keine Signatur 😉

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo axelfxxx,

aber hast du "spontan" ein Stück Quellcode für mich, wie man das bewerkstelligt ?

Quellcode wirst du hier selten bekommen. Du wirst aber im Gegenteil potentiell Ablehnung erfahren, wenn du den Wunsch danach äußerst.

Und auf der anderen Seite: Muss nicht das SelectedIndex Event der ListView abgefragt werden ?

Merk dir einfach in ListViewItem.Tag den zugehörigen TreeNode. Reagiere dann auf ListView.SelectedIndexChanged und markieren den zugehörigen TreeNode.

herbivore

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

Danke erstmal an alle 😉

ich habe nun folgendes probiert: ( Eine Funktion, die ich in einem anderen Programm gefunden, aber für mich umgeschrieben habe🙂



private void explorer_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.explorer_links.Focus(); // TreeView
            node = new TreeNode();
            node.Tag = this.explorer.FocusedItem.Text.ToString();
            findNode(node);
        }
        private void findNode(TreeNode curNode)
        {
            bool check = false;

            foreach (TreeNode node in curNode.Nodes)
            {
                //if search for dir
                if (-1 == explorer.FocusedItem.Text.IndexOf(".") &&
                    explorer.FocusedItem.Text.ToUpper() == node.Tag.ToString().ToUpper())
                {
                    check = true;
                    explorer_links.SelectedNode = node;
                    node.Expand();
                }
                //else file
                else if (-1 != explorer.FocusedItem.Text.IndexOf(".") &&
                    explorer.FocusedItem.Text.ToUpper().Substring(0, explorer.FocusedItem.Text.LastIndexOf(@"\"))
                    == node.Tag.ToString().ToUpper())
                {
                    check = true;
                    explorer_links.SelectedNode = node;
                    node.Expand();
                    this.Refresh();
                    explorer.Focus();

                    //for some reason this always selects the first item in the listview
                    //and I don't know why its so weird

                    //select file in path
                    foreach (ListViewItem item in explorer.Items)
                        if (explorer.FocusedItem.Text.ToUpper().Substring(explorer.FocusedItem.Text.LastIndexOf(@"\") + 1) == item.Text.ToUpper())
                        {
                            item.Selected = true;
                            return;
                        }
                }

                //if not found recurse deeper
                if (!check)
                {
                    foreach (TreeNode childNode in curNode.Nodes)
                        //if(0 != childNode.GetNodeCount(false))
                        findNode(childNode);
                }
            }

        }



Diese selektiert mir aber immer als erstes das LaufWerk A:, aber klappt auch kein Knoten auf !!

Also irgenwas ist daran noch nicht richtig !?

mfg
alex

---- >
Keine Signatur 😉

N
750 Beiträge seit 2004
vor 17 Jahren

bist du mal mit dem debugger durchgegangen ??

?( wer suchet, der findet auch! :]

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

ja, und die Order werden in den Values angezeigt ! Ich weis nicht wo ich da noch einen Fehler haben könnte. C# ist noch ein bischen Neu für mich 😉

---- >
Keine Signatur 😉

N
750 Beiträge seit 2004
vor 17 Jahren

und der programmablauf ist deiner meinung nach richtig???

private void explorer_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.explorer_links.Focus(); // TreeView
            node = new TreeNode();
            node.Tag = this.explorer.FocusedItem.Text.ToString();
            findNode(node);
        }

ist der event der gefeuert wird, wenn du in deinem treeview einen anderen ordner anklickst?? oder wann wird der ausgelöst??

?( wer suchet, der findet auch! :]

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

standart mäßig öffnet sich bei mir im Programm, die Listview, mit "Eigene Dateien".
Sobald ich dann auf einen Order inherhalb dieses Verzeichnis klicke, müsste sich die TreeView, durch das SelectedIndex Event der Listview bewegen, doch was passiert:

Ich klicke einen Order an, und Laufwerk A wird selectiert und flackert kurz auf,

aber vielleicht sollte ich am Start schon die Treenode "Eigene Datenen" suchen lassen !? (form1_load)

mfg

---- >
Keine Signatur 😉

N
750 Beiträge seit 2004
vor 17 Jahren

Merk dir einfach in ListViewItem.Tag den zugehörigen TreeNode. Reagiere dann auf ListView.SelectedIndexChanged und markieren den zugehörigen TreeNode.

dann solltest du das was herbivore geschrieben hat umsetzen.


node = new TreeNode();
node.Tag = this.explorer.FocusedItem.Text.ToString();

du erzeugst ein neues node-objekt und "merkst" dir den text aus dem listview

herbivore meint aber sowas in der art


private void explorer_SelectedIndexChanged(object sender, EventArgs e)
        {
            node = (TreeNode)(((ListViewItem)sender).Tag);
            findNode(node); //<-- die methode muss natürlich angepasst werden
        }

hoffe ich hab herbivore's vorschlag so richtig verstanden 😉

?( wer suchet, der findet auch! :]

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

ok danke werd ich probieren 😉 I do my very best g

---- >
Keine Signatur 😉

N
750 Beiträge seit 2004
vor 17 Jahren

hab am code noch was geändert.
war noch nen fehler drin...........

eigentlich hab ich jetzt auch schon wieder mehr gemacht, als ich wollte 😉
naja, hab halt grade ein bisschen leerlauf hier.

?( wer suchet, der findet auch! :]

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

Hi, Da ich mit der Funktion (findnode) nicht klar kam, hab ich versucht selbst was zu schreiben:


            try
            {
                string Ziel = this.explorer.FocusedItem.Tag.ToString(); //Listview
                node = new TreeNode();
                node.Tag = Ziel;
                foreach (TreeNode xy in explorer_links.Nodes) // TreeView
                {
                    xy.Tag = node.Tag;
                    explorer_links.SelectedNode = xy;
                }
                node.Expand();
            }
            catch { }



Doch hier passiert folgendes: Er geht sämtliche Laufwerke durch und klappt aber nicht die Entsprechende Stelle auf !?

Oder war das ein falscher Gedanke von mir ?

mfg
alex

---- >
Keine Signatur 😉

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo axelfxxx,

dir fehlt noch der rekursive Abstieg ==> Rekursion

herbivore

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

Hi, danke erstmal, aber was meinst du damit ?

Wie bewerkstellige ich das ?

Alex

---- >
Keine Signatur 😉

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo axelfxxx,

Stichwort nehmen und in Forum, Google und Wikipedia danach suchen.

herbivore