VisualBasic Speichern // Öffnen Funktion

Frontline

Newbie
Registriert
Juni 2012
Beiträge
6
Peinlich, aber ich hab gleich nochmal ne frage // anliegen

hab mein programm soweit fertig nurnoch paar kleinigkeiten.

aber woran ich bis jetzt scheitere:
Ich hab ne dropdown liste mit den Menüpunkten speichern // öffnen und hab es mit dem code versucht:

Private Sub SpeichernToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
SaveFileDialog1.Filter = "Textdokumente (.txt)|*.txt"
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
System.IO.File.WriteAllText(SaveFileDialog1.FileName, RichTextBox1.Text, System.Text.Encoding.Default)
End If
End Sub

Private Sub ÖffnenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ÖffnenToolStripMenuItem.Click
OpenFileDialog1.Filter = "Textdokumente (.txt)|*.txt |RTF-Format (.rtf)|*.rtf|Alle Dateien|*.*"
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
RichTextBox1.Text = System.IO.File.ReadAllText(OpenFileDialog1.FileName)
End If
End Sub

aber es kommen nur fehlermeldungen und die komplette dropdown zeile fehlt.

kann mir jemand helfen und mir meinen fehler zeigen + vllt erklären wenn möglich oder ne alternativ lösung anbieten, wie ich die speichern // öffnen funktion hinkriege?

den code hab ich von jemanden übernommen der nen reines txt programm hatte, meins arbeitet aber auch mit variablen (diese gilt es eben zu speichern) könnte das vllt ein grund sein? weil der code für .txt ausgelegt ist?

bin einfach ratlos und hoffe auf hilfe


danke schonmal im voraus.

MfG

Frontline
Ergänzung ()

kennt den keiner die antwort? :/ wäre echt hilfreich das ist das letzte detail was fehlt für mein erstes kleines programm würd mich freun



MfG
Ergänzung ()

So ich hab jetzt mein Problem soweit im griff, das ich prinzipiell mal speichern kann was nen vortschritt ist :evillol:

aber was noch nicht klappt:

ich hab mehrere textfelder, aber er speichert mir nur das was ich ihm als erstes gesagt hab.

Hier mal die Codezeilen:

Private Sub Speichern1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SpeichernToolStripMenuItem.Click
SaveFileDialog1.ShowDialog()
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text, False)
End Sub

Private Sub ÖffnenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ÖffnenToolStripMenuItem.Click
OpenFileDialog1.ShowDialog()
Label1.Text = OpenFileDialog1.FileName
txt1.Text = My.Computer.FileSystem.ReadAllText(Label1.Text)
txt2.Text = My.Computer.FileSystem.ReadAllText(Label1.Text)

End Sub

hier der erste testlauf wo ich oben bei save nur txt1 drinnen hab (hier klar das er nur das speichern kann)
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text, txt2.Text, False)

Hier hab ich den Roten teil eingefügt, in der hoffnung, das er mir das dan auch speichert, aber was natürlich auch nicht geklappt hat.
Beim öffnen zeigt er mir im textfeld txt1 und 2 den Inhalt von 1 an (was sich ja dadurch bedingt, das nur txt1 auf Label1 gespeichert wird und txt2 sich auch auf label1 stützt)

muss ich dan mehr labels einfügen oder wie geht das?

Hilfe nochmal bitte
 
Frontline schrieb:
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text, txt2.Text, False)


Ich kann dir nicht mehr ganz folgen, aber die Zeile ist doch Unsinn.

Die Funktion WriteAllText erwartet vorgegebene Parameter. Mit deiner Komma Anreihung kann daher kein Compiler was anfangen und das auch aus gutem Grund.

Im Tooltip zu WriteAllText sagt er ja auch extra was an welcher Stelle erwartet wird.

Willst du jetzt 2 Textboxen in einer Datei speichern, dann musst du mit Stringverknüpfung arbeiten

Code:
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text & txt2.Text, False)

oder eben noch einen Zeilenumbruch einfügen

Code:
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text & vbcrlf & txt2.Text, False)
 
Hallo!

Deine Funktionen RadAllText und WriteAllText lesen und schreiben, wie der Name schon sagt, die gesamte Textdatei.
D.h. bei WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text, False) muss in txt1.Text schon alles drinnen stehen, was gespeichert werden soll. Deshalb wäre es besser, wenn du deine beiden Textfelder in einer Variable zusammenfügst und dann speichert.
Eine andere Möglichkeit wäre, zwei mal die Funktion aufzurufen und den Anfügen-Parameter auf true zu setzen:

WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text, False)
WriteAllText(SaveFileDialog1.FileName + ".txt", txt2.Text, True)


Beim Auslesen hast du das gleiche Problem, es wird dann die gesamte Textdatei ausgelesen. Da müsstest du dann erstmal irgendwie trennen, damit klar ist, welcher Inhalt in welche Textbox soll.

Wenn du mehrere Dinge speichern und Auslesen willst, solltest du vielleicht von Grund auf anders vorgehen. Dieses Tutorial erklärt das sehr gut:
http://www.vb-seminar.de/vb_38.htm

Viele Grüße,
lexoon
 
Zuletzt bearbeitet:
@ easy:

also das speichern funktioniert schonmal so wie du gesagt hast, aber wie kann ich das dan so öffnen, das jeder text in der ursprünglichen textbox steht.

so steht das was ich vorher in beide aufgeteilt habe beim wiederöffnen nur in einer box...




@ lexoon

muss ich mir angugen danke
 
Wenn du 2 Werte speichern willst, dann musst du die natürlich irgendwie getrennt ablegen, um beim Öffnen zu erkennen was welcher Wert ist.

Ich hab jetzt mal zum Speichern meine vorher gepostet Methode mit dem Zeilenumbruch verwendet:

Code:
SaveFileDialog1.ShowDialog()
        My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + ".txt", txt1.Text & vbCrLf & txt2.Text, False)


Damit ist klar dass in Zeile 1 ein Wert steht und in Zeile 2 ein Wert steht.

Zum Einlesen dann:

Code:
        OpenFileDialog1.ShowDialog()
        Label1.Text = OpenFileDialog1.FileName

        Dim ArrayMyFile() As String = Split(My.Computer.FileSystem.ReadAllText(Label1.Text), vbCrLf)


        Try
            txt1.Text = ArrayMyFile(0)
            txt2.Text = ArrayMyFile(1)
        Catch ex As IndexOutOfRangeException
        End Try

Dim ArrayMyFile() dimensioniert ein dynamisches Array aus Strings.
Split zerhackt mir den Inhalt der Textdatei und trennt am Zeilenumbruch (vbcrlf)
Try Catch End ist zum abfangen von Fehlern, wenn nur 1 oder kein Wert gespeichert war.
 
Zuletzt bearbeitet:
hab deinen code benutzt aber funktioniert nicht

es erscheint der text weder in txt1 noch txt2


klappts bei dir? woran liegts bzw. wo ist der unterschied?



MfG
Ergänzung ()

Bzw. was mir gerade aufällt, die Variablen sind nach dem Speichern und öffnen auch wieder weg, kann man das auch beheben? das Sich das Programm auch den Wert der Variablen mitspeichert // wieder öffnet?



MfG
 
Zurück
Oben