SaveFileDialog und OpenFileDialog - wie anwenden?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von roman.buergler83.

    SaveFileDialog und OpenFileDialog - wie anwenden?

    Hallo zusammen
    Leider weiss ich nicht weiter und muss das leidige Thema wieder aufgreifen. Langsam aber sicher bin ich am verzweifeln. Mein Programm soll zur Erfassung von Arbeitsrapporten dienen (Eingabe in diversen Text- und Comboboxen, File als txt speichern, öffnen und drucken. Da mein Programm mittlerweile bisschen gross ist, dass der ganze Code gepostet werden kann, habe ich eine Kurzversion gemacht.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub ToolStripButton_Speichern_Click(sender As Object, e As EventArgs) Handles ToolStripButton_Speichern.Click
    4. 'Speichern unter (Pfad kann frei gewählt werden)
    5. SaveFileDialog1.ShowDialog()
    6. 'wenn bereits File Exestiert, File überschreiben (speichern)
    7. ?????
    8. End Sub
    9. Private Sub SaveFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    10. 'Was soll gespeichert werden
    11. Dim FileToSave As String = SaveFileDialog1.FileName
    12. Dim ObjektWriter As New System.IO.StreamWriter(FileToSave)
    13. ObjektWriter.Write(TextBox1.Text)
    14. ObjektWriter.Write(vbNewLine)
    15. ObjektWriter.Write(ComboBox1.Text)
    16. ObjektWriter.Write(vbNewLine)
    17. ObjektWriter.Write(TextBox2.Text)
    18. ObjektWriter.Close()
    19. End Sub
    20. Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    21. 'Öffnen
    22. Dim FileToOpen As String = OpenFileDialog1.FileName
    23. Dim ObjektReader As New System.IO.StreamReader(FileToOpen)
    24. TextBox1.Text = ObjektReader.ReadLine
    25. ComboBox1.Text = ObjektReader.ReadLine
    26. TextBox2.Text = ObjektReader.ReadLine
    27. ObjektReader.Close()
    28. End Sub
    29. Private Sub BeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BeendenToolStripMenuItem.Click
    30. 'Form schliessen
    31. Me.Close()
    32. End Sub
    33. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÖffnenToolStripMenuItem.Click
    34. 'Öffnen-Dialog öffen
    35. OpenFileDialog1.ShowDialog()
    36. NeuToolStripMenuItem.Visible = False
    37. TextBox1.Visible = True
    38. ComboBox1.Visible = True
    39. TextBox2.Visible = True
    40. End Sub
    41. Private Sub NeuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuToolStripMenuItem.Click
    42. 'Schaltflächen aktivieren, wenn SafeFileDialog ok
    43. ToolStripButton_Speichern.Visible = True
    44. ÖffnenToolStripMenuItem.Visible = False
    45. TextBox1.Visible = True
    46. ComboBox1.Visible = True
    47. TextBox2.Visible = True
    48. End Sub
    49. End Class



    Beim Speichern:
    Was muss ich machen (Code) damit das Programm überprüft, ob ein File existiert und wenn ja, dass er die Datei speichern (siehe Code ????)?

    Beim Öffnen:
    Die Datei wird eingelesen und wenn diese bearbeitet wird und anschliessend wieder mit dem Speicher-Button gespeichert werden soll, erfolgt eine Fehlermeldung. Warum habe ich keine Ahnung.

    Ich wäre sehr froh wenn mir jemand helfen könnte. Bisher habe ich immer durch das Forum gewühlt und Videos angeschaut bei Problemen, aber nun weiss ich nicht mehr weiter.
    Danke euch für eure Hilfe!

    Aus SaveFileDialog/OpenFileDialog-Filter - Multiple Extensions verschoben. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Willkommen im Forum. :thumbup:

    roman.buergler83 schrieb:

    Was muss ich machen (Code) damit das Programm überprüft, ob ein File existiert und wenn ja, dass er die Datei speichern (siehe Code ????)?
    Gar nix, das macht der SaveFileDialog für ich.
    Teste das in einem kurzen Snippet und wähle einmal eine Datei, die existiert, und einmal eine neue Datei.Eleganter ist es, wenn Du nicht die vom Designer generierten Routinen

    VB.NET-Quellcode

    1. Private Sub SaveFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    und

    VB.NET-Quellcode

    1. Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    verwendest, sondern das DialogResult bei ShowDialog() auswertest. Außerdem gibt es auch eine Methode StreamWriter.WriteLine(), so dass sich 4 Prozeduren Deines Codes so zusammenfassen lassen (meine Button haben andere Namen als Deine ToolStripMenuItems):

    VB.NET-Quellcode

    1. Private Sub ToolStripButton_Speichern_Click(sender As Object, e As EventArgs) Handles btnSpeichern.Click
    2. If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    3. Using ObjektWriter As New System.IO.StreamWriter(SaveFileDialog1.FileName)
    4. ObjektWriter.WriteLine(TextBox1.Text)
    5. ObjektWriter.WriteLine(ComboBox1.Text)
    6. ObjektWriter.Write(TextBox2.Text)
    7. End Using
    8. End If
    9. End Sub
    10. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles btnÖffnen.Click
    11. If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    12. Using ObjektReader As New System.IO.StreamReader(OpenFileDialog1.FileName)
    13. TextBox1.Text = ObjektReader.ReadLine
    14. ComboBox1.Text = ObjektReader.ReadLine
    15. TextBox2.Text = ObjektReader.ReadLine
    16. End Using
    17. TextBox1.Visible = True
    18. ComboBox1.Visible = True
    19. TextBox2.Visible = True
    20. End If
    21. End Sub
    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!
    Hallo Rod
    Danke für deine​ Antwort. Ich verstehe leider nicht ganz was du mir sagen willst, aber danke für deine Hilfe (diese nehme ich gerne an). Ich versuche dir mein Problem genauer zu erklären.
    Mich stört folgendes:
    wenn ich das File speichern will und auf den Button speichern klicke öffnet sich der Speicher-Dialog, das ist ok. Danach gebe ich den Filenamen ein, wähle den Pfad aus und speichere das Ding.
    Wenn ich jetzt aber weitere Eingaben mache im Programm und wieder auf Speichern klicke öffnet sich ja wieder der Speicher-Dialog und das stört mich! Das ist ja eigentlich nicht nötig, da er nur alles speichern soll im File, welches bereits existiert.
    Dies ist sicher möglich (denke oder hoffe ich). Wenn ja, könntest du mir erklären wie ich den Code schreiben muss und wo?
    Merci und Gruss aus der Schweiz
    Wenn du eine Datei öffnest, merke dir den Dateipfad in einer Variablen...
    Wenn du deine Änderungen gemacht hast, dann speicherst du sie entweder wieder im selben Pfad,
    den du dir in der Variablen gemerkt hast, ab und umgehst somit den SaveFileDialog.
    Oder du drückst extra einen Button Speichern unter... und rufst damit den SaveFileDialog wieder auf
    und wählst einen neuen Dateipfad, den du dir wieder in der Variablen merkst...
    ok, ich habe das so machen können und jetzt passt es mir auch :)
    jetzt habe ich aber noch eine andere Frage.

    zum Speichern der ListView habe ich folgendes gemacht und das funzt auch:
    For Each myItem As LIstViewItem In ListView_Fremdleistungen1.Items
    ObjektWriter.WriteLine(myItem.Text & " - " & myItem.SubItems(1).Text & " - " myItem.SubItems(2).Text & " - " myItem.SubItems(3).Text & myItem.SubItems(4).Text & " - " myItem.SubItems(5).Text)

    nun wollte ich den Code umkehren für das Öffnen der Datei, funktioniert aber nicht.... warum? hat jemand eine Lösung wie ich den obenerwähnten Speichersatz einlesen kann? (Code)
    Hier mein Code, welcher nicht funzt:
    For Each myItem As ListViewItem In ListView_Fremdleistungen1.Items
    ObjektReader.ReadLine(myItem.Text & usw wie oben)

    roman.buergler83 schrieb:

    nun wollte ich den Code umkehren
    Dann solltest Du anfangen, indem Du Deinen Code wegschmeißt. Sorry.
    Mach zunächst einen Plan, wie das gehen könnte:
    Kein ListView, sondern DataGridView. Keine Text-Datei mit Hin- und Her-gewurstel, sondern eine DataTable, deren Inhalt Du als XML-Datei speichern und laden kannst. Diese wird dem DataGridView als DataSource zugewiesen und feddich. :D
    Bevor Du nun anfängst Code zu schöpfen, lies Dich erst mal in die Materie ein und benutze die Suchfunktion hier im Forum: DataGridView DataTable Datensatz. Konzentriere Dich auf Posts vom @ErfinderDesRades , das ist der Datenbank-Guru hier.
    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!
    ach manno... jetzt habe ich alles vorbereitet und sollte eigentlich nur noch das Öffnen und Drucken programmieren, der Rest funktioniert.
    *er läuft fluchend aus dem Zimmer*

    ok, danke für den Hinweis. ich probiers mit DataGridView.​