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 😉
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
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 😉
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
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 😉
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 😉
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??
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 😉
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 😉
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 😉
Hallo axelfxxx,
dir fehlt noch der rekursive Abstieg ==> Rekursion
herbivore
Hi, danke erstmal, aber was meinst du damit ?
Wie bewerkstellige ich das ?
Alex
---- >
Keine Signatur 😉
Hallo axelfxxx,
Stichwort nehmen und in Forum, Google und Wikipedia danach suchen.
herbivore