Listbox Openfile Dialog

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Listbox Openfile Dialog

    hallo mal eine kleine frage möcht gerne textdateien in eine listbox öffne also der Inhalt der textdatei natürlich bei RTB habe ich das bisher immer super hinn bekommen, aber irgentwie will das nicht ganz mit der listbox :(


    Mit Freundlichen Gruß:

    Underground77 :)
    Ich geb mal meinen Senf zum Code ab:

    VB.NET-Quellcode

    1. Private Sub listboxload(ByVal Path As String, ByVal SplitChar As String)
    2. Try
    3. For Each Text As String In IO.File.ReadAllText(Path).Split(SplitChar)
    4. ListBox1.Items.Add(Text)
    5. Next
    6. Catch ex As Exception
    7. MessageBox.Show(ex.Message.ToString(), "Error")
    8. End Try
    9. End Sub


    Try Catch Block hier unnötig.

    IO.File.ReadAllText(...).Split(...)

    Warum zuerst den gesamten Text auslesen und dann an einem Zeichen trennen?
    Ergibt zu dieser Problemstellung (so wie ich sie aufgefasst habe) keinen Sinn (Zur Problemstellung des Snippets auf der verlinkten Seite natürlich schon).

    Was kleineres: Zuerst ListBox1.Items.Clear() aufrufen, damit sichergestellt ist, dass nichts angehängt wird.

    Also:

    VB.NET-Quellcode

    1. Sub Foo(ByVal Path As String)
    2. ListBox1.Items.Clear()
    3. For Each i As String In System.IO.File.ReadAllLines(Path)
    4. ListBox1.Items.Add(i)
    5. Next
    6. End Sub




    Edit: Zur zweiten Seite:
    Gleiches Schema:
    Try Catch Block
    Umständliches Auslesen
    Call ReadTextFileToListBox(...)

    Also auch nicht ideal.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    so habe es jetz anders hinn bekommen


    VB.NET-Quellcode

    1. OpenFileDialog1.InitialDirectory = "./"
    2. OpenFileDialog1.FileName = OpenFileDialog1.FileName
    3. OpenFileDialog1.Filter = "ONLY Text Files (*.txt) | *.txt"
    4. OpenFileDialog1.ShowDialog()
    5. Dim R As New IO.StreamReader(OpenFileDialog1.FileName)
    6. Dim str As String() = R.ReadToEnd().Split(New String(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries))
    7. ListBox1.Items.AddRange(str)
    8. R.Close()


    nun bin ich aber noch am überlegen wie ich das hinn bekommen das der pfad der geöffneten datein in meiner textbox5 angezeigt wird hmm ^^ ;(
    @NikoOrtner:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(IO.File.ReadAllLines(Pfad))

    Fertich.

    @underground77

    VB.NET-Quellcode

    1. Dim Path As String = IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Datei.txt")
    2. Using ofd As New OpenFileDialog
    3. With ofd
    4. .InitialDirectory = IO.Path.GetDirectoryName(Path) 'Default
    5. .FileName = IO.Path.GetFileName(Path) 'Default
    6. .Filter = "ONLY Text Files (*.txt) | *.txt"
    7. If .ShowDialog = Windows.Forms.DialogResult.OK Then
    8. ListBox1.Items.Clear()
    9. ListBox1.Items.AddRange(IO.File.ReadAllLines(.FileName))
    10. End If
    11. End With
    12. End Using
    @Unwesen:

    underground77 schrieb:

    nun bin ich aber noch am überlegen wie ich das hinn bekommen das der pfad der geöffneten datein in meiner textbox5 angezeigt wird hmm

    Wenndeden Dialog immer neu erstellst und verwirfst, geht meine Lösung fürs zitierte Problem aber nicht mehr.
    Lieber den Dialog ausse Toolbox aufs Form machen, deshalb isserja drinne, inne Toolbox.
    Nun fang doch net wieder an. Du musst deine Aversion gegen dynamisch erstellte Dialoge mal ablegen, mich überzeugst du jedenfalls nicht mehr.
    Zunächst mal wollte ich zeigen, das die bisherigen Vorschläge zum Einlesen des Dateiinhalts in eine Listbox umständlich waren.

    Das zeite Beispiel ist lediglich meine Version, wie ich die Datei über einem OpenFileDialog einlesen würde. Ob der TE da noch ein Textbox5.text = IO.Path.GetDirectoryName(Path) reinschiebt, ist seine Sache. Dieses Detail hatte ich überlesen.

    Ansonsten kann ich dir net ganz folgen, welche Lösung für welches Zitierte Problem nicht mehr gelten soll.
    Was das merken des zuletzt benutzten Verzeichnisses angeht, hatte ich schon beim letzten mal vorgeschlagen, .RestoreDirectory = True zu benutzen.

    Um hier Beispiele zu zeigen, eignet sich der Code für einen dynamisch erstellten OpenFileDialog besser meiner Meinung nach besser. Soll ich für jedes Setting im Designer nen Screenshot anhängen, wenn ich stattdessen alles relevante unter With ofd initialisieren kann?

    Unwesen schrieb:

    Du musst deine Aversion gegen dynamisch erstellte Dialoge mal ablegen

    warum mussichdas? Ich nenne ein klares Argument für Dialoge aus der Toolbox, und dasses eine Lösung des in post#7 genannten problems ermöglicht, die bei einem dynamischen Dialog nicht funzen würde.

    Kann natürlich sein, dass mit .RestoreDirectory eine annere gleichwertige Lösung besteht - kennichnich, und - äh - hast du das im gelöschten Post vorgeschlagen? - hier sehe ich sie jdfs. nicht.

    Aber ich hab noch weitere Vorbehalte gegen dynamische Dialoge, und dynamisch Controls ühaupt:
    Dassis alles schematischer Code, den man sich aus dem UserCode heraushalten kann, wenn mans den Designer machen läßt.
    Der Code ist überwiegend trivial, aber hat trotzdem gelegentlich auch Tücken, die man kennen muß.
    Der Designer kennt die Tücken, und machts sicher richtig (naja, nicht immer, aber die Fehlerwahrscheinlichkeit ist zigfach niedriger, als wenns händisch gecodet wird).

    Und einfach das Raushalten dieses TrivialCodes aus dem UserCode macht die Wartung der eiglichen Programmlogik wesentlich leichter.

    Es stimmt allerdings, dass man in Foren leichter händisch geproggten Code präsentieren kann, als verständliche Erläuterungen der Designer-Bedienung zu formulieren.
    Händisch geproggter Code hat also einen Kommunikations-Vorteil in Foren, aber das ändert nix daran, dass designergestützte Programmierung leichter wartbar ist.
    Ziemlich berühmter Blog zum Thema: Code is our enemy

    google fund auch eine Entgegnung, die das bisserl relativiert:
    The Best Code is No Code At All

    Aber auch der sagt: Die Kürze von Code ist eine wichtige "dimension to rate on", und auch sein Schlusssatz betonts nochmal: "If you love writing code-- really, truly love to write code-- you'll love it enough to write as little of it as possible."
    @TE: die lösungen stehen in meinem ersten post, da du der code nicht verstehst, schnapp dir ein buch und lerne die grundlagen
    @Unwesen & ErfinderdesRades: könnts ihr bitte mit dem ganzen gelaber aufhören !? Danke !

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SystemUnknow“ ()

    ErfinderDesRades schrieb:

    Ich nenne ein klares Argument für Dialoge aus der Toolbox, und dasses eine Lösung des in post#7 genannten problems ermöglicht, die bei einem dynamischen Dialog nicht funzen würde.

    Tust du eben nicht.

    VB.NET-Quellcode

    1. Dim Path As String = IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Datei.txt")
    2. Using ofd As New OpenFileDialog
    3. With ofd
    4. .InitialDirectory = IO.Path.GetDirectoryName(Path) 'Default
    5. .FileName = IO.Path.GetFileName(Path) 'Default
    6. .Filter = "ONLY Text Files (*.txt) | *.txt"
    7. If .ShowDialog = Windows.Forms.DialogResult.OK Then
    8. ListBox1.Items.Clear()
    9. ListBox1.Items.AddRange(IO.File.ReadAllLines(.FileName))
    10. TextBox5.Text = .FileName 'oder gekürzt: TextBox5.Text = IO.Path.GetDirectoryName(.FileName)
    11. End If
    12. End With
    13. End Using
    Was wäre denn bei einem OpenFileDialog aus der Toolbox anders?