Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: [C#] TreeView im Thread ändern?

  Alt 24. Aug 2009, 19:37
Ich drücke es mal so aus Aufgrund des "Delphi oder C#" Threads bin ich wieder zu C# gestoßen (ich hatte mich KURZZEITIG) damit beschäftigt Deshalb verzeihe mir die etwas "krude" Groß/Kleinschreibung

Auch die Trennung zwischen Sub/Basepath ist inzwischen auch hinfällig. Und was meinst du damit, die DirectoryInfo zu übergeben?
[edit]So jetzt habe ich mal SearchPath "verbessert" (ich hoffe es):
Code:
private int SearchPath(DirectoryInfo workingDir, TreeNodeCollection root)
{
    int fileCnt = 0;

    foreach (DirectoryInfo subDir in workingDir.GetDirectories())
    {
        TreeNode tn = new TreeNode(subDir.Name);
        tn.Checked = true;
        if (SearchPath(subDir, tn.Nodes) > 0)
        {
            root.Add(tn);
            fileCnt++;
        }
    }
    foreach (FileInfo DfmFile in workingDir.GetFiles("*.dfm"))
    {
        TreeNodePlus tn = new TreeNodePlus(DfmFile.Name);
        tn.Checked = true;
        tn.Entry = new DfmEntry(DfmFile.FullName);
        root.Add(tn);
        fileCnt++;
    }
    return fileCnt;
}
  • Parameter & Variablen klein (okay DfmFile nicht fällt mir gerade auf)
  • Ein Bug behoben, dass Dateien in "tieferen" Ordnern, übersprungen wurden
  • Kein Pfad sondern ein DirectoryInfo Objekt (das ändert auch den Aufruf unten: SearchPath(new DirectoryInfo(SelPath + "\\"), Root.Nodes);)
[/edit]

Zum Eigentlichen Thema. Also ich habe das jetzt so (wahrscheinlich nicht gerade hübsch ^^ aber es geht erstmal) gelöst:
Code:
private void BWThread_DoWork(object sender, DoWorkEventArgs e)
{
    TreeNode Root = new TreeNode();
    SearchPath(SelPath + "\\", "", Root.Nodes);
    e.Result = Root;
}

private void BWThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // Thread ist fertig: Ladebalken raus, Einträge eintragen :P
    TVTree.BeginUpdate();
    try
    {
        TreeNode ThreadRoot = (TreeNode)e.Result;
        TVTree.Nodes.Clear();
        foreach (TreeNode node in ThreadRoot.Nodes)
        {
            TVTree.Nodes.Add(node);
        }
        TVTree.Enabled = true;
    }
    finally
    {
        PLoading.Hide();
        TVTree.EndUpdate();
    }
}
MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat