Autor Beitrag
DerKleineImp
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17



BeitragVerfasst: Mi 30.03.11 10:32 
Hallöchen

Nachdem ich gester den alben Tag Google malträtiert habe, habe ich endlich einen treevIew, der halbwegs funktioniert. Aber eben nur halbwegs.
Der Code ist folgender:
ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
private void AllSubDirectories(TreeNode node)
        {
            DirectoryInfo[] directories;
            DirectoryInfo info = new DirectoryInfo(node.FullPath);
            try
            {
                directories = info.GetDirectories();
            }
            catch
            {
                return;
            }
            foreach (DirectoryInfo info2 in directories)
            {
                node.Nodes.Add(info2.Name);
            }
        }

        private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            foreach (TreeNode node in e.Node.Nodes)
            {
                this.AllSubDirectories(node);
            }
        }

        private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e)
        {
            foreach (TreeNode node in e.Node.Nodes)
            {
                node.Nodes.Clear();
            }
        }


Der treeView soll alle Laufwerke und Verzeichnisse, aber keine Dateien, anzeigen. Aus Performancegründen soll nicht auf einen Schlag alles geladen werden sondern nur dann, wenn ein Node aufgeklappt wird. Die Laufwerke werden mir korrekt angezeigt, aber wenn man z.B. Laufwerk C aufklappt, haben die Ordner kein [+]. Ich denke der Grund ist, weil ich nur eine Ebene nach unten suche. Stimmt das? Aber wo genau muss ich den Code jetzt dafür anpassen? Kein Code, aber ein Stoß in die richtige Richtung wäre nett.
Eine andere Sache ist, dass das ganze noch nicht ok ausschaut. Der oberste Knoten soll Desktop sein, darunter als ein Knoten der Arbeitsplatz, und in diesem dann erst die Laufwerke. Im Grunde also wie im Windows Explorer. Wie spreche ich den z.B. den Arbeitsplatz an?
Das ganze verwirrt mich noch arg. Google hat mir wirklich nicht geholfen, bzw haben die Codebeispiele, die ich fand, nicht wirklich eingeleuchtet. Gehe ich das ganze aus der falschen Richtung an?

Liebe Grüße,

Der Imp

Edit: Der alte Threadname war mir dann doch zu doof. :)

Edit2: Das mit dem Desktop hat sich erledigt. Bin auf "Environment.GetFolderPath(Environment.SpecialFolder.Desktop)" gestoßen. :)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 30.03.11 19:30 
Hallo!

Ja, das Problem dürfte tatsächlich sein, dass Du nur eine Ebene nach unten suchst.

Ich würde das so lösen, dass Du beim erstmaligen Füllen des Treeview zwei Ebenen weit suchst (dann sollten alle "+" da sein, die man fürs weitere Vorgehen braucht) und dann bei jedem Ausklappen eines Nodes nicht diesen mit Childnodes befüllst (die sind ja schon da), sondern alle seine Childnodes mit Child-Childnodes befüllst.

Alternativ fügst Du einen Dummy-Childnode, z.B. " ... bitte warten ..." ein, der angezeigt wird, wenn die richtigen Childnodes noch nicht vorhanden sind. Dann hast Du das "+" und es wird während der Verzeichnissuche ein Statustext angezeigt.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
DerKleineImp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17



BeitragVerfasst: Mi 30.03.11 20:06 
Hallöchen Christian

Zitat:
Ich würde das so lösen, dass Du beim erstmaligen Füllen des Treeview zwei Ebenen weit suchst (dann sollten alle "+" da sein, die man fürs weitere Vorgehen braucht) und dann bei jedem Ausklappen eines Nodes nicht diesen mit Childnodes befüllst (die sind ja schon da), sondern alle seine Childnodes mit Child-Childnodes befüllst.

Das klingt gut. Ich wühle mich da mal durch den Code. Ich melde mich dann demnächst mit oder (hoffentlich nicht) ohne Erfolgsmeldung zurück.

Die Frage mit Desktop und Arbeitsplatz hatte sich geklärt. Nur steht da, beim Desktop zum Beispiel, der volle Pfad. Node.name scheint da nicht zu helfen. Muss ich mich nochmal schlau machen. Aber es geht vorran.
Danke derweil für deine Hilfestellung.

LG
DerKleineImp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17



BeitragVerfasst: Fr 01.04.11 17:10 
Tut mir leid, aber ich muss nochmal eure Hilfe in Anspruch nehmen.

Meine Form1.Load
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private void Form1_Load(object sender, EventArgs e)
        {
            TreeNode Desktop = this.treeView1.Nodes.Add(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
            Desktop.Name = "Desktop";
            this.AllSubDirectories(Desktop);
            foreach (string str in Directory.GetLogicalDrives())
            {
                TreeNode node = this.treeView1.Nodes.Add(str);
                this.AllSubDirectories(node);
            }
        }


Ich füge den desktop und alle Laufwerke als Nodes hinzu. Das ist soweit auch ok, aber der Desktopnode zeigt den kompletten Pfad. Also "C:\blahblub\usw".
Desktop.Name="Desktop" scheint keinen Effekt zu haben. Was mache ich wieder falsch? Die Methode AllSubDirectories habe ich weiter oben gepostet und ist derzeit noch unverändert.

LG
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 02.04.11 11:12 
Wie kommst du denn auf Name? Die Hilfe sollte dich eigentlich auf Text verweisen, außerdem würde ich die Anweisung dann eine Zeile nach unten verschieben ;) .

_________________
>λ=
DerKleineImp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17



BeitragVerfasst: Sa 02.04.11 19:18 
Ohooo... Ja, ich mache mir heute wieder Freunde.
Ich habe mir nicht nur die falsche Eigenschaft aus wenigen Möglichen ausgesucht, sondern diese dann auch an falscher Stelle verwendet.
Kann ich mich da jetzt noch sauber rausreden? Schlechten Tag gehabt oder so? Nein, dachte ich auch nicht.
Hat jedenfalls, natürlich wie zu erwarten, gepasst.
Danke, Kha.