Ordner oder Dateien mit einem Dialog auswählen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Ordner oder Dateien mit einem Dialog auswählen

    Hallo,
    gibt es eine Möglichkeit mit einem Dialog entweder Dateien oder Ordner aus zu wählen?
    Zur Zeit gibt es ja den Openfiledialog ( es sind nur Dateien auswählbar)
    oder den
    Folderbrowserdialog (nur Ordner auswählbar)
    Ich bräuchte eine Dialog der beide kombiniert. Weiss jemand ob bzw. wie das geht?
    Ich brauch es halt :)
    Möchte entweder Dateien oder Ordner öffnen können. Nichts mit specihern.
    Geht das irgendwie?
    Die einzige Lösung die mir jetzt einfällt wäre eine Messagebox zu machen in der man dann auswählen kann ob man Dateien oder Ordner öffnen will und dann je nach dem den Openfiledialog und den Folderbrowserdialog zu nehmen :)

    gitarre94 schrieb:

    Die einzige Lösung die mir jetzt einfällt wäre eine Messagebox zu machen in der man dann auswählen kann ob man Dateien oder Ordner öffnen will und dann je nach dem


    gute Idee.
    Die Alternative wäre, selbst einen Open-Dialog zu schreiben, und das wird ziemlich aufwändig.
    Oder was von CodeProject oder anderen Opensource-Resourcen nehmen - aber ander Leute Codes richtig zu integrieren setzt auch ziemlich gute Programmierkenntnisse voraus.

    ErfinderDesRades schrieb:

    und das wird ziemlich aufwändig.



    Nicht unbedingt, wenn man ein eigenes Control von TreeView erben laesst, kann man mit wenigen Zeilen die Dateisystemstruktur im TreeView handeln. So ein TreeView auf eine Form, Listen fuer gewaehlte Ordner und Dateien, zur Ansicht evtl. ListBoxen, Buttons fuer DialogResults und gut.

    VB.NET-Quellcode

    1. Public Class FileSystemTreeView
    2. Inherits TreeView
    3. Public Sub New()
    4. MyBase.new()
    5. End Sub
    6. Public Sub LoadFileSystem()
    7. Nodes.Clear()
    8. For Each drinfo As IO.DriveInfo In IO.DriveInfo.GetDrives()
    9. Dim node As New TreeNode
    10. node.Text = drinfo.RootDirectory.FullName
    11. node.Tag = drinfo.RootDirectory.FullName
    12. If drinfo.IsReady Then
    13. node.Nodes.Add("")
    14. Else
    15. node.ForeColor = SystemColors.GrayText
    16. End If
    17. Nodes.Add(node)
    18. Next
    19. End Sub
    20. Protected Overrides Sub OnBeforeExpand(ByVal e As System.Windows.Forms.TreeViewCancelEventArgs)
    21. MyBase.OnBeforeExpand(e)
    22. e.Node.Nodes.Clear()
    23. Dim node As TreeNode
    24. For Each dinfo As IO.DirectoryInfo In New IO.DirectoryInfo(e.Node.Tag.ToString).GetDirectories()
    25. node = New TreeNode
    26. node.Tag = dinfo.FullName
    27. node.Text = dinfo.Name
    28. Try
    29. If IO.Directory.GetDirectories(dinfo.FullName).Count > 0 _
    30. OrElse IO.Directory.GetFiles(dinfo.FullName).Count > 0 Then
    31. node.Nodes.Add("")
    32. End If
    33. e.Node.Nodes.Add(node)
    34. Catch ex As UnauthorizedAccessException
    35. node.ForeColor = SystemColors.GrayText
    36. e.Node.Nodes.Add(node)
    37. End Try
    38. Next
    39. For Each finfo As IO.FileInfo In New IO.DirectoryInfo(e.Node.Tag.ToString()).GetFiles()
    40. node = New TreeNode
    41. node.Tag = finfo.FullName
    42. node.Text = finfo.Name
    43. node.ImageIndex = 1
    44. node.SelectedImageIndex = 1
    45. e.Node.Nodes.Add(node)
    46. Next
    47. End Sub
    48. End Class


    And i think to myself... what a wonderfuL World!
    Nun ja, so ganz gut ist das so nicht, beim TreeView kann man nur ein Node anwaehlen, daran hatte ich garnicht gedacht. Mit MultiSelection is da so also nichts. War doch ein wenig vorlaut, je mehr ich drueber nachdenke, fuer eine vernueftige Loesung muss man doch deutlich mehr Aufwand betreiben.

    Aber so hatte mir das ungefaehr vorgestellt, vieleicht bringst dich ja irgendwie weiter.
    Dateien
    • FileTree.zip

      (77,21 kB, 143 mal heruntergeladen, zuletzt: )
    And i think to myself... what a wonderfuL World!

    gitarre94 schrieb:

    eine Messagebox zu machen
    Du musst doch iwo eine Aktion auslösen, ich nehme an, ein Button_Click. Da kannst Du auch 2 Buttons für machen oder eine CheckBox und einen Button.
    2 Button sind da gewiss der minimale Aufwand.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!