Copyright ©2014 Janusz Bonarowski 1
VB_7.2_Instrukcja cyklu Do...While, Do...Until
Wykonajmy aplikację pozwalająca wczytać wierszami plik tekstowy do TextBox’u. Dla wygody użytkownika umożliwimy odczytywanie i zapisywanie pliku poprzez okno dialogowe. Polecenia wydamy z menu. Propozycja formularza patrz rys. 1.
Rys. 1. Propozycja formularza
Aby obiekt TextBox mógł wyświetlać tekst w więcej niż jednej linii należy jego właściwość Multiline ustawić na True. Aby TextBox txtOkno wypełniał cały formularz bez względu na jego rozmiar nadajmy, w fazie projektowania, właściwości Dock wartość Fill. Menu zbudujmy jak na rys. 2.
Rys. 2. Projekt menu
Copyright ©2014 Janusz Bonarowski 2 Główny fragment kodu zapewniający odczytywanie pliku tekstowego o nieznanej liczbie wierszy - pokazano na listingu 1.
Listing 1 '(1) Otwarcie pliku do odczytu.
FileOpen(1, plik, OpenMode.Input)
'(2) Odczytanie pliku wierszami.
txtOkno.Text = ""
Do While Not EOF(1) 'Czytaj wiersze dopóki (Not EOF(1) = True txtOkno.Text = txtOkno.Text & LineInput(1) & vbCrLf
Loop
'(3) Zamknięcie pliku FileClose(1)
Pełny kod aplikacji
Listing 2 Private Sub OtwórzToolStripMenuItem_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles OtwórzToolStripMenuItem.Click
' Otwarcie okna dialogowego OpenFileDialog ' o nazwie dlgOtworz
' Określenie początkowego folderu
'jako bieżącego folderu (Current Directory) funkcja CurDir dlgOtworz.InitialDirectory = CurDir()
dlgOtworz.Filter = _
"Pliki tekstowe (*.txt)|*.txt|Wszystkie pliki(*.*)|*.*"
' Otwarcie okna dialogowego (i nic więcej).
' Dalsze akcje w oknie dialogowym obsługiwane są ' w procedurze dlgOtworz_FileOk poniżej
dlgOtworz.ShowDialog() End Sub
Private Sub dlgOtworz_FileOk(ByVal sender As System.Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles dlgOtworz.FileOk
' Obsługa zdarzenia: kliknięcie przycisku [Otwórz]
' w oknie dialogowym - wczytanie danych z pliku Dim plik As String
' Odczytanie ścieżki do pliku.
plik = dlgOtworz.FileName Try
' (1) Otwarcie pliku do odczytu.
FileOpen(1, plik, OpenMode.Input) ' (2) Odczytanie pliku wierszami.
txtOkno.Text = ""
' Czytaj wiersze dopóki (Not EOF(1) = True Do While Not EOF(1)
txtOkno.Text = txtOkno.Text & LineInput(1) & vbCrLf Loop
' (3) Zamknięcie pliku FileClose(1)
Copyright ©2014 Janusz Bonarowski 3 Catch ex As Exception
'Obsługa błędów FileClose(1) 'Prosta
MsgBox(ex.Message) 'Bardziej rozbudowana 'If Err.Number = 53 Then
' MsgBox("Plik o tej nazwie nie istnieje", , _ ' "Błąd dabych")
'ElseIf Err.Number = 13 Then
' MsgBox("Plik zawera błędne dane", , _ ' "Błąd danych")
'Else
' MsgBox("Błąd nr = " & Err.Number.ToString) 'End If
End Try End Sub
Private Sub ZapiszToolStripMenuItem_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles ZapiszToolStripMenuItem.Click
'Otwarcie okna dialogowego SaveFileDialog 'o nazwie dlgZapisz
dlgZapisz.InitialDirectory = CurDir() 'dlgZapisz.Title = "Zapisz plik"
dlgZapisz.Filter = _
"Plik danych (*.txt)|*.txt|All Files(*.*)|*.*"
dlgZapisz.ShowDialog() End Sub
Private Sub dlgZapisz_FileOk(ByVal sender As System.Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles dlgZapisz.FileOk
' Obsługa zdarzenia: kliknięcie przycisku [Zapisz]
' w oknie dialogowym dlgZapisz Dim plik As String
' Pobranie nazwy pliku plik = dlgZapisz.FileName
'(1) Otwarcie pliku do zapisu
FileOpen(1, plik, OpenMode.Output)
'(2) Odczytanie danych.
PrintLine(1, txtOkno.Text)
'(3) Zamknięcie pliku.
FileClose(1) End Sub
Copyright ©2014 Janusz Bonarowski 4 Private Sub KoniecToolStripMenuItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _ Handles KoniecToolStripMenuItem.Click
'Zamknięcie aplikacji Dim odp As Integer
odp = MsgBox("Czy rzeczywiście zamknąć aplikację?", _ MsgBoxStyle.Question + MsgBoxStyle.YesNo, _ "Zamykanie aplikacji")
If odp.ToString = vbYes Then End
End If End Sub
Private Sub KopiujToolStripMenuItem_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles KopiujToolStripMenuItem.Click
My.Computer.Clipboard.Clear()
My.Computer.Clipboard.SetText(txtOkno.SelectedText) End Sub
Private Sub WklejToolStripMenuItem_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles WklejToolStripMenuItem.Click
If My.Computer.Clipboard.ContainsText Then
txtOkno.SelectedText = My.Computer.Clipboard.GetText End If
End Sub
Private Sub WytnijToolStripMenuItem_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles WytnijToolStripMenuItem.Click
My.Computer.Clipboard.Clear() 'Wyczyść Schowek.
' Umieść w Schowku zaznaczony tekst.
My.Computer.Clipboard.SetText(txtOkno.SelectedText) txtOkno.SelectedText = ""
End Sub