Datei Brose spezial

  • VB.NET
  • .NET (FX) 4.0

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

    Datei Brose spezial

    Hallo Leute,

    habe da mal wieder eine Kleinigkeit.

    Ich möchte gerne auf meiner Form2.vb ein Verzeichnis anzeigen lassen.
    D.h. ich möchte, dass mir der Inhalt eines festen Pfades angezeigt wird. In diesem Pfad sind PDF's gespeichert. Diese möchte ich namentlich anzeigen lassen. Ebenfalls möchte ich sie in einem kleinen Vorschaufenster anzeigen lassen und per Doppelklick auch gerne öffnen.

    Jemand eine Idee wie ich das schön lösen kann? Openfiledialog möchte ich nicht verwenden, da der Anwender den Pfad nicht verändern soll.
    Ebenfalls bin ich mir nicht sicher ob ich eine ListBox möchte, da ich eben auch das StandartIcon für PDFs anzeigen möchte.

    Bin mir nicht sicher ob es da vielleicht etwas gibt, was das ganze einfach machen könnte.

    Danke im Voraus :)
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Definiere

    razzzer530i schrieb:

    Vorschaufenster
    Mit Dim fis() = New IO.DirectoryInfo("c:\Temp").GetFiles("*.pdf", IO.SearchOption.TopDirectoryOnly) bekommst Du ein Array, in dem FiliInfo-Instanzen aller PDF-Dateien im vorgegebenen Pfad enthalten sind.
    Nimm ein DataDridView zur Anzeige, da kannst Du der 1. Spalte das Icon geben, den anderen Spalten Deine Informationen. Das Doppelklich-Event kannst Du abonieren und entsprechend reagieren.
    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!
    datagridview sieht recht schön aus, aber ich bin völlig überfragt damit, wie ich dieses ´simple Array "fis" richtig eintragen soll.

    klar ist mir:

    VB.NET-Quellcode

    1. DataGridView1.ColumnCount = 2
    2. DataGridView1.Columns(0).HeaderText = "Dateiname"
    3. DataGridView1.Columns(1).HeaderText = "Größe"


    aber weiß nicht, wie ich die Spalten fülle. Habe mich jetzt überall durchgelesen. Komme aber nicht wirlich weit damit. Habe öfter gelesen, dass das DatagridView mehr Probleme macht und veraltet ist.
    Hilfe? :D
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    razzzer530i schrieb:

    Habe öfter gelesen, dass das DatagridView mehr Probleme macht und veraltet ist.
    Oh, das ist mir nicht bekannt.
    Wahrscheinlich meinst Du das ListView.
    =====
    Wirf Deine Philosophie weg und verwende eine DataTable, die Du dem DataGridView als DataSource zuweist.
    Desweiteren gibt es noch die Property DisplayMember, da kannst Du die Namen der Properties zuweisen, die angezeigt werden sollen.
    Du weist Deinen Controls die FileInfo-Struktur zu und bestimmst per DisplayMember, welche Property angezeigt werden soll. Das funktioniert dynamisch.
    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!

    RodFromGermany schrieb:

    Oh, das ist mir nicht bekannt.
    Wahrscheinlich meinst Du das ListView.


    Nein, meine DataGridView. Konnte allerdings keine richtige Erklärung für diese Meinung finden weshalb ich sie ignoriert habe.
    Habe das jetzt mal getestet und funktioniert auch recht gut wie ich das gern hätte. Ist allerdings noch die Frage ob ich Unterordner anzeigen kann. Ist das möglich? *.pdf und IO.SearchOption.AllDirectories geht ja. Nur kann ich mir die unterverzeichnisse anzeigen lassen?

    Mit sowas in der Richtung?

    VB.NET-Quellcode

    1. DataGrindView1.Rows.Add(Directory.Name und sonst Datei.Name, datei.größe)
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    razzzer530i schrieb:

    unterverzeichnisse
    Sieh Dir in meiner Codezeile in Post #2 den letzten Parameter von GetFiles(...) an.
    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!

    VB.NET-Quellcode

    1. Public Sub ShowTree(ByVal Path As String)
    2. Dim nNode As New TreeNode(Path)
    3. TreeView1.Nodes.Add(nNode)
    4. Me.FillTreeNode(nNode)
    5. End Sub
    6. Private Sub FillTreeNode(ByVal dNode As TreeNode)
    7. Try
    8. Dim d As New DirectoryInfo(dNode.FullPath)
    9. For Each di As DirectoryInfo In d.GetDirectories
    10. Dim nNode As New TreeNode(di.Name)
    11. dNode.Nodes.Add(nNode)
    12. FillTreeNode(nNode)
    13. Next
    14. For Each fi As FileInfo In d.GetFiles
    15. Dim fNode As New TreeNode(fi.Name)
    16. dNode.Nodes.Add(fNode)
    17. Next
    18. Catch : End Try
    19. End Sub
    20. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    21. End Sub


    Soweit bin ich. geht auch ganz gut. Folgende Frage:

    Ich möchte jetzt den Oberordner unter einem "Fakenamen" anzeigen, damit man den Ordner nicht lokalisieren kann. Wie mache ich das?

    Wäre unglaublich dankbar wenn ich folgendes lösen könnte:

    Möchte 1. den obersten Node mit anderem Namen anzeigen und

    2.
    über

    VB.NET-Quellcode

    1. Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
    2. '????????????
    3. End Sub

    in einer Listbox die Dateien anzeigen, die sich im entsprechenden Ordner befinden...

    Danke :)




    EDIT: >>

    Habe es herausgefunden.

    Für jeden den es Interessiert:

    Habe jetzt einen Browser gebastelt, der in einem TreeView Verzeichnisse, und deren PDF Inhalte in einer ListBox anzeigt.
    Der Pfad des Trees wird in der Anzeige mit einem Friendly-Name angegeben, sodass die Dateien nicht sofort lokalisiert werden können.
    Ebenfalls werden im TreeView keine Dateien angezeigt.

    Wenn jemand Interesse an der Lösung hat, einfach kommentieren. Ich würde das Ergebnis dann posten.

    Hab allerdings noch die Frage, wie ich aus der ListBox eine PDF per Doubleclick öffne.

    Help me :)
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „razzzer530i“ ()

    razzzer530i schrieb:

    Wenn jemand Interesse an der Lösung hat, einfach kommentieren. Ich würde das Ergebnis dann posten.

    Also erstmal: Es wäre schön, wenn du deine Ansätze gleich mit postest. Stell dir vor in 2 Jahren hat jemand genau das selbe Problem, antwortet, möchte eine Lösung und es antwortet niemand mehr/weiß keiner mehr wie es funktioniert. Mag für dich jetzt nicht relevant sein - aber überlege wie es ist wenn du der suchende bist und nur sowas vorfindest :P


    razzzer530i schrieb:

    Hab allerdings noch die Frage, wie ich aus der ListBox eine PDF per Doubleclick öffne.


    Naja eigentlich müsste du nur ein passendes Event finden -> Bspw. Doppelklick-Event der Listbox -> da nimmst du den selektierten Eintrag, der dein PDF-Dokument enthalten sollte. und in Verbindung mit dem Pfad des Dokuments, dem Dokumentennamen und einem geeigneten Viewer kannst du dir die PDF-Datei anzeigen lassen.

    MfG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Sorry, war so blöd und habe alles möghliche versucht außer die entsprechende Datei und dessen Pfad per Process.Start zu öffnen :D

    Ok veröffentlichen wir das ganze mal.
    Wie es ca. aussieht, könnt Ihr im Anhang sehen.
    Zunächst muss ich sagen, dass ich das ganze in einem größeren Projekt untergracht und deshalb auf mehrere Module usw. verteilt habe.

    Im folgenden zeige ich, wie man einen Dateibrowser erstellt, der in einem Treeview NUR Verzeichnisse und in einer Listbox NUR PDF-Dateien anzeigt, die anschließend per Doppelklick geöffnet werden können. Natürlich kann man das alles individuell anpassen.
    (>>>Der OberNode von meinem Treeview bekommt in diesem Beispiel einen Friendly-Name, damit der Benutzer den richtigen Pfad nicht sofort lokalisieren kann.<<<)

    Was ihr benötigt:
    -Button
    -TreeView
    -Listbox
    -Variable ZX als Public String

    Zunächst müsst ihr den Treeview füllen. Das habe ich in einem Modul erledigt:
    Module Dateibrowser
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub ShowTree(ByVal Path As String, ByVal xnamex As String)
    2. Dim nNode As New TreeNode(Path)
    3. Form2.TreeView1.Nodes.Clear()
    4. Form2.TreeView1.Nodes.Add(nNode)
    5. FillTreeNode(nNode)
    6. nNode.Text = xnamex
    7. End Sub
    8. Public Sub FillTreeNode(ByVal dNode As TreeNode)
    9. Try
    10. Dim d As New DirectoryInfo(dNode.FullPath)
    11. For Each di As DirectoryInfo In d.GetDirectories
    12. Dim nNode As New TreeNode(di.Name)
    13. dNode.Nodes.Add(nNode)
    14. FillTreeNode(nNode)
    15. Next
    16. Catch : End Try
    17. End Sub



    Dann muss natürlich noch die ListBox gefüllt werden. Das erledige ich ebenfalls in einem Modul:

    Module Listboxfuellen
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub listbf(ByVal ZX As String)
    2. Dim x As String
    3. x = ZX
    4. Debug.Print(x)
    5. Form2.ListBox1.Items.Clear()
    6. Try
    7. Dim fis() = New IO.DirectoryInfo(x).GetFiles("*.pdf", IO.SearchOption.TopDirectoryOnly)
    8. Form2.ListBox1.Items.AddRange(fis)
    9. Form2.ListBox1.DisplayMember = "Name"
    10. Catch
    11. End Try
    12. End Sub



    Die Listbox wird per NodeMouseClick also einem Klick auf das Entsprechende Verzeichnis gefüllt indem ihr folgendes verwendet:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
    2. Dim x As String
    3. x = "pfad" & e.Node.FullPath
    4. ZX = x
    5. listbf(ZX)
    6. End Sub


    Jetzt kann man den ganzen Spaß natürlich per Button testen.
    Beachtet aber bitte, dass ich die Variablen für meine Zwecke verwendet habe und diese natürlich an Euer Projekt angepasst werden müssten.

    Form1
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub BTN_Ind_Click(sender As Object, e As EventArgs) Handles BTN_Ind.Click
    2. ShowTree("Pfad des Trees", "Name der angezeigt werden soll")
    3. End Sub



    Um jetzt noch eine PDF zu öffnen, benötigen wir natürlich in der ListBox das DoubleClick event.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
    2. Dim itempath As String
    3. itempath = ZX & "\" & ListBox1.SelectedItem.ToString
    4. Dim startuP As New ProcessStartInfo(itempath)
    5. startuP.WindowStyle = ProcessWindowStyle.Maximized
    6. Process.Start(startuP)
    7. End Sub



    Sollte etwas nicht stimmen oder nicht funktionieren, so meldet das bitte sofort, damit ich es korrigieren kann. Bei mir funktioniert es einwandfrei. Möglicherweise hat sich ja ein Fehler eingeschlichen.
    Bilder
    • browser.jpg

      13,2 kB, 448×162, 180 mal angesehen
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~