Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tutorials
Autor
Nachricht
Marduk
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 374

How to: Kleiner Editor
Verfasst am: 13.05.2008, 01:36

Mit diesem Tutorial möchte ich euch zeigen wie ihr mit Textdateien arbeiten könnt. Wir werden Dateien speichern und sie anschließend wieder laden.

Anfangen wollen wie mit der Form. Da wir ja etwas in die Datei schreiben wollen, brauchen wir eine Textbox auf unserer Form. Am besten stellt ihr die Eigenschaft "MultiLine" auf true, denn dann können wir mehrzeilige Texte speichern und laden. Zu der Textbox brauchen wir auch zwei Buttons mit denen wir die Events zum Speichern und Laden aufrufen können.

Hier mal ein Beispiel wie die Form aussehen könnte:

Um den Text der Textbox jetzt zu speichern, müssen wir als erstes in den Code-Modus wechseln, dazu klicken wir auf den Speichern-Button doppelt.

Um den Text zu speichern schreiben wir folgenden Code
Visual Basic: [code]Dim outputstream As New IO.StreamWriter("test.txt")
outputstream.Write(Textbox1.Text)
outputstream.Close()[/code]
Zur Erklärung: Wir deklarieren uns zu Beginn einen Stream, dem wir den Dateinamen übergeben. Mit .Write(Textbox.Text) schreiben wir unseren Inhalt der Textbox in den Stream und damit in unsere Datei. Die gespeicherte Datei befindet sich dann in dem Ordner, in dem sich auch unser Programm befindet. Um das zu ändern, kann man anstatt nur dem Dateinamen auch einen Pfad angeben (z.B Dim outputstream As New IO.StreamWriter("C:test.txt")), dann würde die Textdatei auf dem Laufwerk C gespeichert werden.

Das wäre es zum Speichern des Textes, um unseren Text wieder zu öffnen und in unserer Textbox anzuzeigen, klicken wir erstmal doppelt auf den Laden-Button.

Der Code zum Laden sieht dann so aus:
Visual Basic: [code]Dim inputstream As New IO.StreamReader("test.txt")
Textbox1.Text = inputstream.ReadToEnd()
inputstream.Close()[/code]
Auch beim Laden wird bei der Deklaration unseres Streams der Dateiname übergeben. Und hier kann man auch wieder einen direkten Pfad angeben. Mit .ReadToEnd() wird der gesamte Inhalt der Datei ausgelesen und vorerst in den Stream geladen. Um ihn aus dem Stream in die Textbox zu bekommen benutzen wir die zweite Codezeile. Und zum Schluss wird der Stream wieder geschlossen (Sollte man nicht vergessen, denn sonst treten bei mehreren und größereren Streams Speicherprobleme auf;))

Wenn wir das Programm jetzt testen, sollte alles wunderbar funktionieren.

Da wir aber unsere gespeicherte Datei auch mal anders benennen wollen und auch andere Dateien öffnen wollen, brauchen wir etwas, mit dem wir die Dateien auswählen können. Und die Lösung heisst OpenFileDialog und SaveFileDialog. Diese zwei Dialoge kennt man zumeist aus diversen anderen Windows-Programmen. Es öffnet sich ein Fenster, in dem man eine Datei aussuchen bzw. speichern kann. Und genau das soll unser Editor auch können. Dazu ziehen wir aus der Toolbox den OpenFileDialog und den SaveFiledialog auf unsere Form. Die zwei Steuerelemente werden nich auf der Form angezeigt, sondern automatisch unten an den Rand gesetzt.

An unserem Code ändert sich nicht viel. Vor den Speicher-Code schreiben wir folgenden Code:
Visual Basic: [code]SaveFileDialog1.Filter = "Textdateien|*.txt"
SaveFileDialog1.DefExt = "txt"
SaveFileDialog1.ShowDialog()
Dim sFilePath As String = SaveFileDialog1.FileName[/code]
Und für "test.txt" setzen wir "sFilePath" ein. Für den Laden-Code sieht das ganze dann so aus:
Visual Basic: [code]OpenFileDialog1.Filter = "Textdateien|*.txt"
OpenFileDialog1.ShowDialog()
Dim sFilePath As String = OpenFileDialog1.FileName[/code]
Und ersetzen wieder "test.txt" durch "sFilePath".

Mit .Filter geben wir an, welche Dateien in dem kleinen Fenster angezeigt werden sollen. Hier werden jetzt nur die Textdateien angezeit und die anderen ausgeblendet.
Mit .DefExt geben wir die Dateiendung an, in der die Datei gespeichert werden soll. Da es eine Textdatei werden soll, geben wir "txt" an.

Das war auch schon das ganze Tutorial über unseren kleinen Editor.

Und hier ist noch mal der ganze Code, ein bisschen ordentlicher und verbesserter:

Visual Basic: [code] Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
With SaveFileDialog1
.Filter = "Textdateien|*.txt|Alle Dateien|*.*"
.DefaultExt = "vb-x"
If .ShowDialog = Windows.Forms.DialogResult.OK And .FileName <> vbNullString Then
Dim outputstream As New IO.StreamWriter(.FileName)
outputstream.Write(TextBox1.Text)
outputstream.Close()
End If
End With
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
With OpenFileDialog1
.Filter = "Textdateien|*.txt"
.DefaultExt = "txt"
If .ShowDialog = Windows.Forms.DialogResult.OK And .FileName <> vbNullString Then
Dim inputstream As New IO.StreamReader(.FileName)
TextBox1.Text = inputstream.ReadToEnd
inputstream.Close()
End If
End With
End Sub[/code]
 
Zero Day
Tutorial Leser
Tutorial Leser

Anmeldedatum: 10.05.2008
Beiträge: 37


Verfasst am: 13.05.2008, 08:36

Vielen Dank genau das habe ich gebraucht hab gestern garnix gebacken bekommen

Das hier ist mein Kleiner Editor bis jetzt
Visual Basic: [code]Imports System.IO
Public Class Form1

Public Class Form1

End Class

Private Sub NeuToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeuToolStripMenuItem.Click

TextBox1.Text = ""

End Sub

Private Sub SpeichernToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SpeichernToolStripMenuItem.Click

With SaveFileDialog1
.Filter = "Ada (*.ada)|*.ada|Assembler (*.asm)|*.asm|ASP (*.asp)|*.asp|AutoIt (*.au3)|*.au3|Batch (*.bat)|*.bat|C (*.c)|*.c|CAML (*.ml)|*.ml|CMAKEFILE (*.cmake)|*.cmake|C++ (*.h)|*.h|C# (*.cs)|*.cs|CSS (*.css)|*.css|Diff(*.diff)|*.diff|Flash Action (*.as)|*.as|Fortran (*.f)|*.f|Haskell (*.hs)|*.hs|HTML (*.html)|*.html|INI (*.ini)|*.ini|Java (*.java)|*.ajav|JavaScript (*.js)|*.js|KiXtart (*.kix)|*.kix|Lisp (*.lsp)|*.lsp|Lua (*.lua)|*.lua|Makefile (*.mak)|*.mak|MATLAB (*.m)|*.m|NFO (*.nfo)|*.nfo|NSIS (*.nsi)|*.nsi|Pascal (*.pas)|*.pas|Perl (*.pl)|*.pl|PHP (*.php)|*.php|PostScript (*.ps)|*.ps|Properties File (*.properties)|*.properties|Python (*.py)|*.py|RC (*.rc)|*.rc|Ruby (*.rb)|*.rb|Sheme (*.scm)|*.scm|Shell (*.sh)|*.sh|SmallTalk (*.st)|*.st|SQL (*.sql)|*.sql|TCL (*.tcl)|*.tcl|TeX (*.tex)|*.tex|Text (*.txt)|*.txt|Visual Basic (*.vb)|*.vb|Verilog (*.v)|*.v|VHDL (*.vhd)|*.vhd|XML (*.xml)|*.xml|YAML (*.yml)|*.yml"
.DefaultExt = "vb-x"
If .ShowDialog = Windows.Forms.DialogResult.OK And .FileName <> vbNullString Then
Dim outputstream As New IO.StreamWriter(.FileName)
outputstream.Write(TextBox1.Text)
outputstream.Close()

End If

End With

End Sub

Private Sub ÖffnenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ÖffnenToolStripMenuItem.Click

With OpenFileDialog1
.Filter = "Alle Dateien|*.*"
.DefaultExt = "txt"
If .ShowDialog = Windows.Forms.DialogResult.OK And .FileName <> vbNullString Then
Dim inputstream As New IO.StreamReader(.FileName)
TextBox1.Text = inputstream.ReadToEnd
inputstream.Close()

End If

End With

End Sub

Private Sub InformationToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InformationToolStripMenuItem.Click
MsgBox("Coded by Zero Day", MsgBoxStyle.OkOnly, "About")
End Sub

Private Sub KopiernToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KopiernToolStripMenuItem.Click

My.Computer.Clipboard.Clear()
My.Computer.Clipboard.SetText(TextBox1.Text)
If My.Computer.Clipboard.ContainsText Then
TextBox1.Text = My.Computer.Clipboard.GetText
End If

End Sub

Private Sub EinfügenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EinfügenToolStripMenuItem.Click

Dim data_object As New DataObject
data_object.SetData(DataFormats.Text, TextBox1)
Clipboard.SetDataObject(data_object)

End Sub
End Class
[/code]

Ich muss das mit dem Einfügen noch schauen und Ausschneiden dann bin ich fertig Very Happy

Kann man diese Functions vllt kürzer und besser durch HotKeys lösen ???
 
Marduk
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 374


Verfasst am: 13.05.2008, 17:49

Kann man diese Functions vllt kürzer und besser durch HotKeys lösen ???


Kürzer heisst nicht unbedigt besser Wink Also der Code ist schon soweit optimiert, da kann man nicht mehr viel verbessern, zudem ist er sowieso sehr kurz und fällt bei der Geschwindigkeit nicht ins Gewicht
 
speedywolf
Poster
Poster

Anmeldedatum: 01.05.2008
Beiträge: 108


Verfasst am: 13.05.2008, 19:14

Voraus:
Habs nicht so mit vb.net^^

Bei mir kommt immer dieser Fehler, was ich nicht verstehe (sry):

Der Name "OpenFileDialog1" wurde nicht deklariert.
Der Name "SaveFileDialog1" wurde nicht deklariert.
 
Marduk
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 374


Verfasst am: 13.05.2008, 19:31

Du musst aus der Toolbox das OpenFileDialog-Element (bzw. das SaveFileDialog-Element) auf deine Form ziehen. Dann funktioniert es. Alternativ kannst du auch den Code hier, in die einzelnen Subs schreiben. Dann werden die Dialoge per Code erstellt.
Visual Basic: [code]Dim SaveFileDialog As New SaveFileDialog() 'bzw.
Dim OpenFileDialog As New OpenFileDialog()[/code]
 
speedywolf
Poster
Poster

Anmeldedatum: 01.05.2008
Beiträge: 108


Verfasst am: 13.05.2008, 19:35

Okay vielen Dank Smile Funzt alles super!

Langsam gefällt mir VB.NET 2008 :p
Meine Frage:

Wie kann ich jetzt machen, wenn man das Programm startet, statt Speichern, Erstellen steht und wenn man erstellt hat, statt erstellen, speichern steht?^^

Wenn ihr nicht draus kommt was ich meine, kann ich es mit Bilder zeigen :p
 
Marduk
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 374


Verfasst am: 14.05.2008, 20:40

Ich würde mir ne globale Variable deklarieren vom Typ Boolean. Danach bei Form1_Load die Variable auf false setzen. Und dann folgenden Code bei dem Button:

Visual Basic: [code]Dim var As Boolean

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button2.Text = "Speichern"
var = False
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'false = Speichern aktiv und Laden inaktiv
'true = Speichern inaktiv und Laden aktiv

If var = False Then
'wird gespeichert danach alles auf Laden stellen
Button2.Text = "Laden"
var = True
Else
'wird geladen und alles auf Speichern stellen
Button2.Text = "Speichern"
var = False
End If
End Sub[/code]

Ok, bei mir steht jetzt am Anfang Speichern, musst halt vertauschen Wink
 
speedywolf
Poster
Poster

Anmeldedatum: 01.05.2008
Beiträge: 108


Verfasst am: 14.05.2008, 20:51

Vielen Dank Marduk!
Boah.. VB.NET is ja mal saugeil x)

Edit:
Kann man eignetlich bei den txt Dateien Tags verwenden? Z.B: [ b] [/ b] etc.?
 
Mr.BurnZ
Newbie
Newbie

Anmeldedatum: 22.05.2008
Beiträge: 3


Verfasst am: 22.05.2008, 17:46

Hey, kann man auch irgend wie eine Suche aktivieren so wie im Normalen Editor mit Strg+F und alles Makieren mit Strg+A ?
 
tr4st
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 486


Verfasst am: 22.05.2008, 18:40

@speedywolf: Nein.
@Mr.BurnZ: Müsstest du dir zusätzlich einbauen, KeyEvents abfangen.
 
Marduk
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 374


Verfasst am: 24.05.2008, 18:48

@speedywolf: Eine Textbox unterstützt es nicht, da müsstest du schon eine RichTextBox verwenden, mit der du solche Sachen machen kannst.
@Mr.Burnz: Wie Daniel schon gesagt hat, müsstest du mit den Events spielen. Strg+A wird aber auch von der normalen Textbox unterstützt.
 
ShadowLenny
Tutorial Leser
Tutorial Leser

Anmeldedatum: 25.05.2008
Beiträge: 54


Verfasst am: 20.07.2008, 19:37


Kann ich hier noch reinposten?
(Thread ist ja schon ein wenig älter.)

Wollte nur mal ganz groß DANKE sagen!

Das, was du am Anfang gemacht hast, also das, was eigentlich total unkomfortabel ist und wo man keinen eigenen Namen eingeben kann...

danach habe ich schon voll lange gesucht!

Tausend dank Smile
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tutorials

Tags: visual basic, editor, speichern, textbox

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wichtig: Filebrowser z.B. für ein RAT 2204 13.01.2008, 12:14
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 914 20.05.2002, 01:28
Keine neuen Beiträge Fenster auslesen z.b von icq oder msn wer online kommt 1336 11.02.2008, 17:46
Keine neuen Beiträge Eine kleine Frage an euch.. 1023 30.09.2007, 09:57
Keine neuen Beiträge IP Stealer example 4 RuaP and vb-x.org 1176 30.04.2007, 17:20
 


[ Time: 0.1662s ][ Queries: 116 (0.1077s) ][ GZIP on - Debug on ]