Thursday, December 15, 2016

Bab 7. Visual Basic .NET Untuk Pemula



File dan Struktur






Bab ini menunjukkan pada Anda bagaimana menyimpan data ke dalam file teks sekuensial dan kemudian membacanya kembali ke dalam sebuah aplikasi. Anda akan belajar bagaimana menggunakan kontrol OpenFileDialog, SaveFileDialog, ColorDialog, dan FontDialog. Anda dapat menggunakan kontrol-kontrol ini untuk melengkapi aplikasi Anda dengan kotak-kotak dialog Windows standar untuk membuka dan menyimpan file dan untuk memilih warna dan jenis font. Anda akan mempelajari kontrol PrintDocument dan bagaimana mencetak laporan dari aplikasi Anda. Terakhir, Anda akan belajar bagaimana memaketkan unit-unit data ke dalam struktur.


7.1 Menggunakan File
KONSEP: File adalah sekumpulan data yang disimpan di disk penyimpanan komputer. Data dapat disimpan di dalam file dan kemudian dibaca kembali.

Aplikasi-aplikasi yang telah Anda ciptakan sejauh ini mensyaratkan Anda untuk memasukkan kembali data setiap kali program dijalankan karena data yang disimpan di dalam kontrol-kontrol dan variabel-variabel disimpan di dalam RAM, dan data tersebut akan hilang begitu program berakhir.

Data dapat disimpan di dalam sebuah file, pada disk penyimpanan komputer. Setelah disimpan, data tetap ada meskipun program berhenti dijalankan dan dapat dibaca kembali saat dibutuhkan. Pada bab ini, Anda akan menuliskan aplikasi-aplikasi yang menciptakan file-file untuk menyimpan data. Aplikasi-aplikasi ini tidak mensyaratkan user untuk memasukkan kembali data setiap kali aplikasi-aplikasi tersebut dijalankan.

Proses Penggunaan File
Langkah-langkah berikut harus dilakukan ketika file digunakan oleh aplikasi:
1.      File harus dibuka. Jika file belum ada, pembukaan file berarti juga penciptaan file baru.
2.      Data dituliskan ke dalam file atau dibaca dari file.
3.      Ketika aplikasi selesai menggunakan file, file tersebut akan ditutup.

Ketika sebuah aplikasi Visual Basic secara aktif bekerja dengan data, data tersebut ditempatkan di dalam memori, biasanya di dalam variabel-variabel dan/atau properti-properti kontrol. Ketika data dituliskan ke dalam file, data itu disalin dari variabel-variabel dan/atau properti-properti kontrol, seperti ditunjukkan pada Gambar 7.1.

Gambar 7.1 Menuliskan data ke dalam sebuah file


Ketika data dibaca dari file, ia disalin dari file ke variabel dan/atau properti kontrol, seperti ditunjukkan pada Gambar 7.2.


Gambar 7.2 Membaca dari sebuah file


Istilah file masukan dan file keluaran sering digunakan. File masukan adalah sebuah file dari mana sebuah program membaca data. Dikatakan file masukan karena data yang disimpan di dalamnya berperan sebagai masukan ke program. File keluaran adalah sebuah file ke mana sebuah program menuliskan data. Dikatakan file keluaran karena program menyimpan keluarannya ke dalam file. Pada buku ini, Anda akan mempelajari tipe paling sederhana dari file data, yang dikenal sebagai file akses-sekuensial. Kadangkala tipe file ini disebut pula dengan file teks karena ia dapat dengan mudah diciptakan dan dimodifikasi menggunakan editor teks seperti Windows Notepad.

Menuliskan ke File dengan Objek StreamWriter
Ada dua cara dalam membuka file teks sehingga Anda dapat menuliskan data ke dalamnya: Anda dapat menciptakan sebuah file baru atau Anda dapat membuka sebuah file yang telah ada sehingga data ditempelkan (ditempatkan di belakang data yang ada) di dalam file. Penulisan ke dalam file dilakukan oleh objek StreamWriter. Ada dua langkah yang perlu dilakukan:
1.      Deklarasikan sebuah variabel StreamWriter.
2.  Jika Anda ingin menciptakan sebuah file baru, panggil File.CreateText dan tugaskan nilai baliknya kepada variabel StreamWriter. Atau, jika Anda ingin menempelkan data ke file teks yang telah ada, panggil File.AppendText dan tugaskan nilai baliknya kepada variabel StreamWriter.

Sebelum menggunakan objek StreamWriter, Anda harus menyisipkan statemen Imports di atas kode file form Anda. Ini akan membuat kelas-kelas StreamWriter tersedia bagi program Anda:

Imports System.IO

CATATAN: Adalah dimungkinkan untuk mengabaikan statemen Imports System.IO, tetapi setiap referensi ke kelas StreamWriter harus menggunakan nama utuhnya, yaitu System.IO.StreamWriter.


Menciptakan File Teks
Pertama, Anda akan menciptakan sebuah file teks baru. Diawali dengan mendeklarasikan sebuah variabel StreamWriter, gunakan bentuk umum berikut:

Dim VarObjek As StreamWriter

VarObjek adalah nama dari variabel objek. Anda bisa menggunakan Private atau Public menggantikan Dim jika Anda mendeklarasikan variabel objek pada level-kelas atau level-modul. Berikut adalah contohnya:

Dim fileTelp As StreamWriter

Selanjutnya, Anda memanggil metode File.CreateText, lewatkan kepadanya nama dari file. Sebagai contoh:

fileTelp = File.CreateText("daftarTelp.txt")

Perhatikan bagaimana nilai balik dari File.CreateText ditugaskan kepada variabel StreamWriter dengan nama fileTelp.

Nama file yang Anda lewatkan kepada metode File.CreateText dapat memuat path lengkap, seperti C:\data\filevb\daftarTelp.txt. Jika Anda hanya menggunakan nama file tanpa path, file yang akan diciptakan berada di lokasi yang sama dengan file eksekutabel dari aplikasi, yang secara default berada di dalam folde \bin\Debug pada projek Anda.

Jika file tidak dapat diciptakan, metode File.CreateText akan melemparkan sebuah eksepsi. Ini bisa terjadi jika Anda menetapkan path yang salah, atau jika aplikasi Anda tidak memiliki ijin untuk menciptakan file pada lokasi tertentu.


Membuka File yang Telah Ada dan Menempelkan Data ke dalamnya
Di sini, diasumsikan bahwa file teks telah ada, dan Anda ingin menambahkan data ke akhir file tersebut. Pertama, Anda mendeklarasikan sebuah variabel StreamWriter:

Dim fileTelp As StreamWriter

Kemudian Anda memanggil metode File.AppendText, melewatkannya nama dari file yang telah ada. Sebagai contoh:

fileTelp = File.AppendText("daftarTelp.txt")

Setiap data yang dituliskan ke dalam file akan dituliskan ke akhir dari isi file yang telah ada. Jika file yang Anda tetapkan sebagai argumen kepada metode File.AppendText tidak ada, file itu akan diciptakan. Jika file tersebut tidak dapat dibuka atau diciptakan, maka metode akan melemparkan eksepsi. Sebagai contoh, eksepsi akan terjadi jika Anda menetapkan path yang salah, atau jika aplikasi Anda tidak memiliki ijin untuk menciptakan file pada lokasi tertentu.


Menuliskan Data ke dalam File
Metode WriteLine dari kelas StreamWriter menuliskan sebaris data ke dalam sebuah file. Bentuk umum dari metode ini adalah:

VarObjek.WriteLine(Data)

VarObjek adalah nama dari sebuah variabel objek StreamWriter. Data merepresentasikan konstanta-konstanta atau variabel-variabel yang isinya akan dituliskan ke dalam file. Metode WriteLine menuliskan data ke file dan kemudian menuliskan sebuah karakter garis-bari (newline) setelah data itu. Karakter garis-baru adalah sebuah karakter yang tak terlihat yang memisahkan teks.

Untuk lebih memahami bagaimana metode WriteLine bekerja, perhatikan contoh berikut. Asumsikan bahwa sebuah aplikasi membuka suatu file dan menuliskan tiga nama siswa dan skor ujiannya ke dalam file dengan kode berikut:

Dim fileSiswa As StreamWriter
Try
    'membuka file
    fileSiswa = File.CreateText("DataSiswa.txt")

    'menuliskan data ke dalam file
    fileSiswa.WriteLine("John")
    fileSiswa.WriteLine(95)
    fileSiswa.WriteLine("Krista")
    fileSiswa.WriteLine(98)
    fileSiswa.WriteLine("Bob")
    fileSiswa.WriteLine(82)
Catch

    MessageBox.Show("Error: File tidak dapat diciptakan.")
End try

Anda dapat memvisualisasi data yang sedang dituliskan ke dalam file dengan cara berikut:

John<newline>95<newline>Krista<newline>98<newline>Bob<newline>82<newline>

Karakter newline direpresentasikan di sini sebagai <newline>. Anda sebenarnya tidak bisa melihat karakter newline, tetapi ketika file dibuka pada sebuah editor teks seperti Notepad, isinya ditampilkan seperti pada Gambar 7.3. Seperti yang dapat Anda lihat dari gambar, setiap karakter newline menyebabkan data yang mengikutinya ditampilkan pada garis baru.

Gambar 7.3 Isi file ditampilkan pada Notepad

Selain memisahkan isi dari sebuah file pada baris-baris, karakter newline juga berperan sebagai pemisah atau delimiter. Delimiter adalah sebuah item yang memisahkan item lain. Ketika Anda menuliskan data ke dalam sebuah file menggunakan metode WriteLine, karakter newline berperan sebagai delimiter. Nanti, Anda akan melihat bahwa data perlu dipisahkan agar ia dapat dibaca dari file.


Menuliskan Baris Kosong ke dalam File
Metode WriteLine dapat menuliskan sebuah baris kosong ke dalam file dengan memanggil metode ini tanpa argumen:

teksFile.WriteLine()

Metode Write
Metode Write, sebuah anggota dari kelas StreamWriter, menuliskan sebuah item data ke dalam file tanpa menuliskan karakter newline. Bentuk umumnya adalah berikut:

VarObjek.Write(Data)

VarObjek adalah nama dari sebuah variabel objek StreamWriter. Data merepresentasikan isi dari konstanta atau variabel yang akan dituliskan ke dalam file. Metode ini dapat dipakai untuk menuliskan data ke dalam sebuah file tanpa menghentikan baris dengan karakter newline. Sebagai contoh, diasumsikan bahwa sebuah aplikasi memiliki sebuah variabel objek StreamWriter dengan nama fileKeluaran, berikut dengan variabel-variabel berikut:

Dim strNama As String = "John Kristoff"
Dim intId As Integer = 47895
Dim strTelp As String = "555–7864"

Isi dari ketiga variabel dituliskan ke dalam satu baris di dalam file:

fileKeluaran.Write(strNama)
fileKeluaran.Write(" ")
fileKeluaran.Write(intId)
fileKeluaran.Write(" ")
fileKeluaran.WriteLine(strTelp)

Statemen pertama menuliskan variabel strNama ke dalam file. Statemen kedua menuliskan sebuah karakter spasi (“ “), statemen ketiga menuliskan variabel intId, dan statemen keempat menuliskan spasi lain. Statemen terakhir menggunakan metode WriteLine untuk menuliskan nomor telepon, yang diikuti dengan sebuah karakter newline. Berikut adalah contoh keluaran yang dihasilkan:

John Kristoff 47895 555—7864

Menutup File
Kebalikan dari pembukaan file adalah penutupan file. Kelas StreamWriter memiliki sebuah metode dengan nama Close untuk menutup file. Berikut adalah bentuk umum dari metode ini:

StreamWriter.Close()

Setelah metode ini dieksekusi, file yang direferensi oleh VarObjek akan ditutup. Sebagai contoh, dimisalkan bahwa filePenjualan adalah sebuah variabel objek yang mereferensi sebuah objek StreamWriter. Statemen berikut menutup file yang berkaitan dengan filePenjualan:

filePenjualan.Close()

Untuk menghindari hilangnya data, aplikasi Anda sebaiknya selalu menutup file ketika Anda selesai menggunakannya. Komputer umumnya menciptakan satu atau lebih buffer (area memori) ketika sebuah file dibuka. Ketika sebuah aplikasi menuliskan data ke dalam file, data itu lebih dahulu dituliskan ke buffer. Ketika buffer terisi, semua data yang disimpan di sana dituliskan ke dalam file. Teknik ini memperbaiki kinerja sistem karena penulisan data ke memori jauh lebih cepat daripada penulisannya ke dalam file. Metode Close menuliskan semua informasi yang tidak tersimpan yang tersisa di dalam buffer dan membebaskan memori yang dialokasikan oleh objek StreamWriter.


Tutorial 7.1: Menyempurnakan Aplikasi Yang Menuliskan Data Ke File
Langkah 1: Buka projek Demo WriteLine File. Form aplikasi ditunjukkan pada Gambar 7.4.

Gambar 7.4 Form aplikasi Demo WriteLine File

Langkah 2: Sempurnakan kode untuk dua event handler pada form seperti ditunjukkan berikut. (Jangan ketika nomor baris, karena ia hanya untuk referensi). Pastikan untuk menuliskan statemen Imports yang ditunjukkan pada baris 1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Imports System.IO

Public Class Form1

    Private Sub tombolCiptakan_Click(…) Handles tombolCiptakan.Click
        'konstanta untuk banyak teman
        Const intBANYAK_TEMAN As Integer = 3

        'variabel-variabel lokal
        Dim strNamaFile As String       'nama file
        Dim strTeman As String          'nama teman
        Dim strTelp As String           'untuk memuat nomor telepon
        Dim intHitung As Integer        'pencacah loop
        Dim fileTeman As StreamWriter   'variabel objek StreamWriter

        'membaca nama file dari user
        strNamaFile = InputBox("Masukkan nama file.")

        Try
            'membuka file
            fileTeman = File.CreateText(strNamaFile)

            'membaca data dan menuliskannya ke dalam file
            For intHitung = 1 To intBANYAK_TEMAN
                'membaca nama teman
                strTeman = InputBox("Masukkan nama teman " &
                "nomor " & intHitung.ToString())

                'membaca nomor telepon teman
                strTelp = InputBox("Masukkan nomor telepon " &
                "teman.")

                'menuliskan data ke dalam file
                fileTeman.WriteLine(strTeman)
                fileTeman.WriteLine(strTelp)
            Next

            'menutup file
            fileTeman.Close()
        Catch
            'pesan error
            MessageBox.Show("File tidak dapat diciptakan.")
        End Try
    End Sub

    Private Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
        'menutup form
        Me.Close()
    End Sub
End Class

Periksa event handler tombolCiptakan_Click. Berikut adalah simpula dari deklarasi-deklarasi yang ada pada baris 7 sampai baris 14:
·         Baris 7: Konstanta intBANYAK_TEMAN ditetapkan 3. Ini adalah banyak teman yang datanya akan disimpan.
·         Baris 10: Variabel strNamaFile akan memuat path dan nama file yang akan diciptakan oleh aplikasi.
·         Baris 11: Variabel strTemen akan memuat nama dari teman.
·         Baris 12: Variabel strTelp akan memuat nomor telepon teman.
·         Baris 13: Variabel intHitung akan dipakai sebagai pencacah loop.
·         Baris 14: Variabel fileTeman adalah sebuah variabel objek yang akan dipakai untuk membuka file dan menuliskan data ke dalamnya.

Baris 17 menggunakan sebuah kotak masukan untuk meminta user memasukkan nama file. Nama file kemudian ditugaskan kepada variabel strNamaFile.

Statemen Try-Catch yang diawali pada baris 19 akan menangkap sembarang eksepsi yang dilemparkan. Baris 21 mencoba menciptakan file yang ditetapkan oleh path dan nama file yang dimasukkan oleh user. Jika file tidak bisa diciptakan, sebuah eksepsi akan dilemparkan dan program melompat ke klausa Catch pada baris 40. Jika file berhasil diciptakan, loop For…Next pada baris 24 akan dieksekusi.

Ketika loop dieksekusi, ia akan beriterasi tiga kali, dengan variabel intHitung mengambil nilai 1 sampai 3.

Di dalam loop, statemen pada baris 26 sampai baris 27 menggunakan sebuah kotak masukan untuk meminta user memasukkan nama teman. Nama yang dimasukkan oleh user ditugaskan kepada variabel strTeman. Kemudian statemen pada baris 30 sampai baris 31 menggunakan sebuah kotak masukan untuk meminta user memasukkan nomor telepon teman. Nomor telepon yang dimasukkan user ditugaskan kepada variabel strTelp. Baris 34 menuliskan nama teman ke dalam file, dan baris 35 menuliskan nomor telepon ke dalam file. Kemudian, loop diulangi lagi. Ketika loop selesai dieksekusi, baris 39 menutup file.

Langkah 3: Simpan projek. Jalankan aplikasi dan klik tombol Ciptakan File. Ketika diminta untuk memasukkan nama file, sediakan path dari lokasi disk. Sebagai contoh, jika Anda menuliskan C:\TemanKu.txt, maka aplikasi akan menciptakan file TemanKu.text di direktori akar dari drive C. Jika Anda memasukkan C:\Temp\TemanKu.txt, maka aplikasi akan menciptakan file TemanKu.txt di dalam folder C:\Temp. Masukkan path dan nama file yang tepat karena Anda akan menggunakan file yang sama kembali pada Tutorial 7.2.

Langkah 4: Masukkan tiap nama dan nomor telepon berikut:

Nama:                                     Telepon:
John Kristoff        555-1234
Vivian Siahaan       222-3456
Patricia Joy         888-6789

Langkah 5: Pada Windows Explorer, cari file yang diciptakan ketika Anda menjalankan aplikasi. Klik ganda pada file tersebut untuk membukanya pada editor teks. Isi file ditampilkan pada Gambar 7.5. Seperti yang dapat Anda lihat, setiap item dituliskan pada baris terpisah karena karakter newline memisahkan tiap item.

Gambar 7.5 Isi file yang ditampilkan dalam Notepad

Langkah 6: Tutup jendela Notepad yang menampilkan file teks.


Menempelkan Data ke dalam File
Ketika Anda menempelkan data ke dalam sebuah file, Anda menuliskan data baru di tempat setelah data yang sebelumnya ada di dalam file tersebut. Jika file yang telah ada dibuka dengan metode AppendText, data yang dituliskan ke dalam file ditempelkan ke belakang file. Jika file tidak ada, file baru akan diciptakan. Sebagai contoh, diasumsikan bahwa file TemanKu.txt telah ada dan memuat data berikut, dari Tutorial 7.1:

John Kristoff
555-1234
Vivian Siahaan
222-3456
Patricia Joy
888-6789

Statemen-statemen berikut membuka file dengan mode append dan menuliskan data ke belakang file:

'mendeklarasikan sebuah variabel objek
Dim fileTeman As StreamWriter
'membuka file
fileTeman = File.AppendText("TemanKu.txt")
'menulis data
fileTeman.WriteLine("Krista Simanungkalit")
fileTeman.WriteLine("555–4545")
'menutup file
fileTeman.Close()

Setelah kode ini dieksekusi, file TemanKu.txt akan memuat data berikut:

John Kristoff
555-1234
Vivian Siahaan
222-3456
Patricia Joy
888-6789
Krista Simanungkalit
555–4545

Membaca File dengan Objek StreamReader
Untuk membaca data dari sebuah file teks sekuensial, Anda menggunakan objek StreamReader. Kelas StreamReader menyediakan metode-metode untuk membaca data dari file. Proses penciptaan objek StreamReader sama dengan penciptaaan objek StreamWriter, yang telah didiskusikan. Pertama, Anda mendeklarasikan sebuah variabel objek dengan statemen deklarasi dengan bentuk umum berikut:

Dim VarObjek As StreamReader

VarObjek adalah nama dari variabel objek. Sama seperti variabel biasa, Anda bisa menggunakan penspesifikasi akses Private atau Public jika Anda mendeklarasikan variabel objek pada level-kelas atau level-modul.

Selanjutnya, Anda memanggil metode File.OpenText, yang menciptakan sebuah instansi dari objek StreamReader dan menyimpan alamatnya di dalam variabel objek. Bentuk umum dari metode ini adalah berikut:

File.OpenText(Namafile)

NamaFile adalah sebuah string atau variabel string yang menetapkan path dan/atau nama file yang akan dibuka. Metode ini membuka file dengan menetapkan Namafile dan menghasilkan sebuah objek StreamReader yang dapat dipakai untuk membaca data dari file. Jika file tidak ada, atau file tidak dapat dibukan, sebuah eksepsi akan dilemparkan. Kode berikut menunjukkan proses dua-langkah dalam membuka file dan menugaskan objek StreamReader:

Dim fileKonsumen As StreamReader
fileKonsumen = File.OpenText("konsumen.txt")

Statemen pertama mendeklarasikan sebuah variabel objek dengan nama fileKonsumen. Statemen kedua membuka file konsumen.txt dan menghasilkan alamat dari sebuah objek StreamReader yang dapat dipakai membaca data dari file. Alamat dari objek StreamReader ditugaskan kepada variabel fileKonsumen.

Sama seperti pada kasus kelas StreamWriter, Anda perlu menuliskan statemen Imports di atas file kode Anda:

Imports System.IO

Membaca Data dari File
Metode ReadLine pada kelas StreamReader membaca sebaris data dari sebuah file. Bentuk umum dari metode ini adalah berikut:

VarObjek.ReadLine()

VarObjek adalah nama dari sebuah variabel objek StreamReader. Metode ini membaca sebaris data dari file yang berkaitan dengan VarObjek dan menghasilkan data sebagai sebuah string. Sebagai contoh, diasumsikan bahwa fileKonsumen adalah sebuah objek StreamReader dan strNamaKonsumen adalah sebuah variabel string. Statemen berikut membaca sebaris data dari file dan menyimpannya di dalam variabel string tersebut:

strNamaKonsumen = fileKonsumen.ReadLine()

Sebuah objek StreamReader membaca data hanya dengan arah maju. Ketika file dibuka, posisi pembacaan atau posisi item yang akan dibaca adalah item pertama di dalam file. Ketika data dibaca, posisi pembacaan bergerak maju. Sebagai contoh, perhatikan file dengan nama Kutipan.txt, seperti ditunjukkan pada Gambar 7.6. Seperti yang Anda dapat lihat dari gambar, file tersebut mempunyai tiga baris teks. Dimisalkan bahwa sebuah program membuka file dengan kode berikut:

Dim fileTeks As StreamReader
fileTeks = File.OpenText("Kutipan.txt")

Gambar 7.6 File teks dengan tiga baris data

Ketika kode ini membuka file, posisi pembacaannya berada di awal baris pertama, seperti diilustrasikan pada Gambar 7.7.

Gambar 7.7 Posisi pembacaan awal

Statemen berikut membaca sebaris data dari file, dimulai dari posisi pembacaan terkini, dan diakhiri pada penanda end-of-line:

strMasukan = fileTeks.ReadLine()

Setelah statemen ini dieksekusi, variabel strMasukan akan memuat string “Imajinasi lebih”. Penanda akhir baris (end-of-line) yang tak terlihat dilompati, dan posisi pembacaan ditempatkan di awal dari baris kedua. Gambar 7.8 mengilustrasikan posisi pembacaan terkini.

Gambar 7.8 Posisi pembacaan setelah baris pertama dibaca


Jika metode ReadLine dipanggil kembali, baris kedua dibaca dari file dan posisi pembacaan file maju ke baris ketiga. Setelah semua baris dibaca, posisi pembacaan berada di akhir file.

Menutup File
Penutupan sebuah objek StreamReader yang terbuka dilakukan dengan memanggil metode Close. Bentuk umumnya adalah berikut:

VarObjek.Close()


Pada Tutorial 7.2, Anda menyempurnakan sebuah aplikasi yang menggunakan statemen ReadLine untuk membaca file yang telah Anda ciptakan pada Tutorial 7.1.

Tutorial 7.2: Menyempurnakan Aplikasi Yang Membaca File
Langkah 1: Buka projek Demo ReadLine File. Form aplikasi, yang telah diciptakan bagi Anda, ditampilkan pada Gambar 7.9.

Gambar 7.9 Form dari aplikasi Demo ReadLine File

Langkah 2: Sempurnakan kode untuk event-event handler seperti ditunjukkan berikut. (Jangan ketikkan nomor baris, karena hanya ditujukan untuk referensi). Pastikan untuk menuliskan statemen Imports yang ditunjukkan pada baris 1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Imports System.IO

Public Class Form1

    Private Sub tombolBaca_Click(…) Handles tombolBaca.Click
        'konstanta untuk banyak teman
        Const intBANYAK_TEMAN As Integer = 3

        'variabel-variabel lokal
        Dim fileTeman As StreamReader   'variabel objek
        Dim strNamafile As String       'nama file
        Dim strTeman As String          'nama teman
        Dim strTelp As String           'memuat nomor telepon
        Dim intHitung As Integer        'pencacah loop

        'membaca nama file dari user
        strNamafile = InputBox("Masukkan nama file.")

        Try
            'membuka file
            fileTeman = File.OpenText(strNamafile)

            'membaca data
            For intHitung = 1 To intBANYAK_TEMAN
                'membaca nama dan nomor telepon dari file
                strTeman = fileTeman.ReadLine()
                strTelp = fileTeman.ReadLine()

                'menampilkan data pada kotak list
                listTeman.Items.Add("Nomor Teman " & intHitung.ToString())
                listTeman.Items.Add("Nama: " & strTeman)
                listTeman.Items.Add("Telepon: " & strTelp)
                listTeman.Items.Add("")   'menambahkan baris kosong
            Next

            'menutup file
            fileTeman.Close()
        Catch
            MessageBox.Show("File tidak bisa dibuka.")
        End Try
    End Sub

    Private Sub tombolBersihkan_Click(…) Handles tombolBersihkan.Click
        'membersihkan kotak list
        listTeman.Items.Clear()
    End Sub

    Private Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
        'menutup form
        Me.Close()
    End Sub
End Class

Periksa event handler tombolBaca_Click. Berikut adalah simpula dari deklarasi-deklarasi yang ada pada baris 7 sampai baris 14:
·         Baris 7: Konstanta intBANYAK_TEMAN ditetapkan 3. Ini adalah banyak teman yang datanya akan dibaca.
·         Baris 10: Variabel fileTeman adalah sebuah objek variabel yang dipakai untuk membuka file dan membaca data dari file tersebut.
·         Baris 11: Variabel strNamaFile akan memuat path dan nama file yang akan diciptakan oleh aplikasi.
·         Baris 12: Variabel strTemen akan memuat nama dari teman.
·         Baris 13: Variabel strTelp akan memuat nomor telepon teman.
·         Baris 14: Variabel intHitung akan dipakai sebagai pencacah loop.

Baris 17 menggunakan sebuah kotak masukan untuk meminta user memasukkan nama file. Nama file kemudian ditugaskan kepada variabel strNamaFile.

Statemen Try-Catch yang diawali pada baris 19 akan menangkap sembarang eksepsi yang dilemparkan. Baris 21 mencoba menciptakan file yang ditetapkan oleh path dan nama file yang dimasukkan oleh user. Jika file tidak bisa diciptakan, sebuah eksepsi akan dilemparkan dan program melompat ke klausa Catch pada baris 38. Jika file berhasil diciptakan, loop For…Next pada baris 24 akan dieksekusi.

Ketika loop dieksekusi, ia akan beriterasi tiga kali, dengan variabel intHitung mengambil nilai 1 sampai 3.

Di dalam loop, statemen pada baris 26 membaca sebaris data dari file dan menugaskannya kepada variabel strTemen, dan baris 27 membaca baris data berikutnya dari file dan menugaskannya kepada variabel strTelp. Baris 30 sampai baris 33 menambahkan data temen ini pada kotak list, yang diikuti dengan sebuah baris kosong. Kemudian, loop akan diulangi kembali. Ketika loop selesai dieksekusi, baris 39 menutup file.

Langkah 3: Simpan projek. Jalankan aplikasi dan klik tombol Baca Dari File. Sebuah kotak masukan akan ditampilkan yang meminta user untuk memasukkan nama file. Masukkan path dan nama file yang Anda telah gunakan untuk menciptakan file pada Langkah 3 dari Tutorial 7.1. Ketika Anda mengklik tombol OK pada kotak masukan, data dibaca dari file dan ditampilkan pada kotak list, seperti ditunjukkan pada Gambar 7.10. Jika Anda tidak mengetikkan path dan nama file yang sama seperti yang Anda lakukan pada Tutorial 7.1, Anda akan melihat sebuah kotak pesan yang mengindikasikan bahwa file tidak ditemukan. Pada kasus itu, klik tombol Baca Dari File kembali, kali ini masukkan path dan nama file yang tepat.

Gambar 7.10 Data ditampilkan pada kotak list

Langkah 4: Klik tombol Keluar untuk mengakhiri aplikasi.


Menentukan Apakah File Ada atau Tidak
Metode File.OpenText melemparkan sebuah eksepsi jika file yang dicoba dibuka tidak ada. Untuk menghindari eksepsi, Anda dapat memanggil metode File.Exists untuk menentukan apakah sebuah file ada atau tidak sebelum Anda mencoba membukanya. Bentuk umum dari metode ini adalah berikut:

File.Exists(Namafile)

Namafile adalah nama dari sebuah file, yang mencakup path. Metode ini menghasilkan True jika fila ada atau False jika file tidak ada. Kode berikut menunjukkan sebuah contoh bagaimana menggunakan metode ini untuk menentukan apakah sebuah file ada atau tidak sebelum Anda mencoba membuka file:

If File.Exists(strNamafile) Then
    'membuka file
    fileMasukan = File.OpenText(strNamafile)
Else
    MessageBox.Show(strNamafile & " tidak ada.")
End If

Menggunakan vbTab untuk Menyejajarkan Item-Item
Konstanta pustaka vbTab menggeser posisi penampilan maju ke depan sejauh kelipatan 8. Anda dapat menggunakannya untuk menyejajarkan kolom-kolom yang ditampilkan atau dicetak agar lebih efektif. Berikut adalah sebuah contoh sederhana, yang ditampilkan pada sebuah kotak list, dari sebuah garis referensi yang diikuti dengan tiga baris yang menampilkan tab-tab dan karakter-karakter:

kotakList.Items.Add("012345678901234567890")
kotakList.Items.Add("X" & vbTab & "X")
kotakList.Items.Add("XXXXXXXXXXXX" & vbTab & "X")
kotakList.Items.Add(vbTab & vbTab & "X")

Pada keluaran pada Gambar 7.11, konstanta vbTab pada baris kedua menggeser posisi penampilan maju sejauh 8 kolom sebelum menampilkan huruf X. (Posisi penampilan dinomori dari 0). Pada baris ketiga dan keempat, posisi penampilan bergeser ke kolom 16 sebelum menampilkan huruf X akhir.

Gambar 7.11 Mendemonstrasikan tab-tab pada sebuah kotak list


Anda perlu sebentar kembali ke aplikasi Demo ReadLine File dari Tutorial 7.2 untuk menampilkan informasi teman dengan cara yang sedikit lebih baik. Hal ini dilakukan dengan menyisipkan tab-tab di antara label-label dan nama-nama pada kotak list. Berikut adalah kode termodifikasi dari loop di dalam event handler tombolBaca_Click:

'menampilkan data pada kotak list
listTeman.Items.Add("Nomor Teman " & vbTab & intHitung.ToString())
listTeman.Items.Add("Nama: " & vbTab & vbTab & strTeman)
listTeman.Items.Add("Telepon: " & vbTab & vbTab & strTelp)
listTeman.Items.Add("")   'menambahkan baris kosong

Keluaran yang dihasilkan dari kode ini ditunjukkan pada Gambar 7.12.

Gambar 7.12 Demo ReadLine File, menggunakan tab-tab pada kotak list


Mendeteksi Akhir File
Aplikasi Demo ReadLine File pada Tutorial 7.2 dirancang untuk membaca tiga rekaman persis. Ini karena Anda mengetahui berapa banyak rekaman data yang disimpan di dalam file. Pada banyak kasus, banyak data di dalam sebuah file tidak diketahui. Pada kasus ini, Anda menggunakan properti EndOfStream dari objek StreamReader untuk menentukan apakah akhir file telah diraih atau tidak. Jika akhir file telah diraih, properti EndOfStream akan ditetapkan True. Sebaliknya, ia ditetapkan False.

Contoh berikut menggunakan sebuah loop Do Until yang menggunakan properti EndOfStream untuk menentukan apakah akhir dari file Skor.txt telah diraih ata tidak. Loop membaca semua baris dari file dan menambahkannya pada kotak list listHasil:

Dim fileSkor As StreamReader
Dim strMasukan As String
fileSkor = File.OpenText("Skor.txt")

Do Until fileSkor.EndOfStream
    strMasukan = fileSkor.ReadLine()
    listHasil.Items.Add(strMasukan)
Loop

fileSkor.Close()


Tutorial 7.3 memeriksa sebuah aplikasi yang mendeteksi akhir dari sebuah file.

Tutorial 7.3: Memeriksa Sebuah Aplikasi Yang Mendeteksi Akhir File
Langkah 1: Buka projek Demo File. Form ditunjukkan pada Gambar 7.13.

Gambar 7.13 Form Demo File

Langkah 2: Klik tombol Ciptakan File. Sebuah kotak masukan akan ditampilkan dan menanyakan: Berapa banyak integer yang ingin Anda masukkan? Tekan 5 dan tekan Enter.

Langkah 3: Karena Anda meminta lima integer, aplikasi akan meminta Anda lima kali menggunakan kotak masukan. Masukkan nilai 2, 4, 6, 8, dan 10. Aplikasi akan menuliskan nilai-nilai ini ke dalam sebuah file.

Langkah 4: Setelah Anda memasukkan nilai terakhir, klik tombol Baca File. Aplikasi membaca nilai-nilai dari file dan menampilkannya pada kotak list, seperti ditunjukkan pada Gambar 7.14. Klik tombol Keluar untuk mengakhiri aplikasi.

Gambar 7.14 Form Demo File dengan nilai-nilai ditampilkan

Langkah 5: Bukan jendela Code. Bagian pertama dari kelas form, termasuk event handler tombolCiptakan_Click, ditunjukkan di sini dengan nomor baris untuk referensi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Imports System.IO

Public Class Form1
    'konstanta level-kelas untuk nama file
    Private Const strNAMAFILE As String = "Nilai.txt"

    Private Sub tombolCiptakan_Click(…) Handles tombolCiptakan.Click
        'variabel-variabel lokal
        Dim fileKeluaran As StreamWriter    'variabel objek
        Dim intBanyaMaks As Integer         'banyak nilai yang dimasukkan
        Dim intHitung As Integer = 0        'pencacah loop, ditetapkan 0
        Dim intNilai As Integer             'untuk menampung masukan user

        Try
            'membaca banyak nilai dari user
            intBanyaMaks = CInt(InputBox("Berapa banyak integer yang " &
            "ingin Anda masukkan?"))

            Try
                'menciptakan file
                fileKeluaran = File.CreateText(strNAMAFILE)

                'membaca nilai-nilai dan menuliskannya ke file
                Do While intHitung < intBanyaMaks
                    Try
                        'membaca sebuah integer
                        intNilai = CInt(InputBox("Masukkan sebuah integer."))

                        'menuliskan integer ke dalam file
                        fileKeluaran.WriteLine(intNilai)

                        'menginkremen intHitung
                        intHitung += 1
                    Catch
                        'pesan error untuk integer tak valid
                        MessageBox.Show("Nilai terakhir yang Anda masukkan bukanlah " &
                        "integer yang valid. Silahkan coba lagi.")
                    End Try
                Loop

                'menutup file
                fileKeluaran.Close()

            Catch
                'pesan error untuk error penciptaan file
                MessageBox.Show("Error menciptakan file " & strNAMAFILE)
            End Try

        Catch
            'pesan error untuk masukan tak valid
            MessageBox.Show("Silahkan masukkan integer.")
        End Try
    End Sub

Amati kode ini lebih dekat. Baris 1 menunjukkan statemen Imports.System.IO, dan deklarasik kelas form diawali pada baris 3. Baris 5 mendeklarasikan sebuah konstanta level-kelas dengan nama strNAMAFILE untuk nama file yang akan digunakan.

Berikut adalah simpulan dari deklarasi-deklarasi yang ada pada baris 9 sampai baris 12:

  • Baris 9: Variabel fileKeluaran adalah sebuah variabel objek yang akan dipakai untuk membuka file dan menuliskan data ke dalamnya.
  • Baris 10: Variabel intBanyakMaks akan menampung banyaknya nilai integer yang akan dituliskan ke dalam file.
  • Baris 11: Variabel intHitung akan dipakai sebagai pencacah loop.
  • Baris 12: Variabel intNilai akan menampung sebuah nilai yang dimasukkan oleh user, yang akan dituliskan ke dalam file. Perhatikan bahwa Anda secara eksplisit menginisialisasi intHitung dengan 0.

Perhatikan bahwa statemen Try-Catch diawali pada baris 14, dan kemudian baris 16 sampai baris 17 menggunakan kotak masukan untuk meminta user memasukkan banyak nilai integer yang ingin dimasukkan. Jika user memasukkan nilai yang tidak valid, fungsi CInt pada baris 16 akan melemparkan eksepsi dan program akan melompat ke klausa Catch pada baris 49.

Jika user memasukkan nilai integer yang valid, program akan berlanjut untuk menciptakan file. Perhatikan statemen Try-Catch lain diawali pada baris 19, dan kemudian pada baris 21 menciptakan file. Jik file tidak dapat diciptakan, metode File.CreateText akan melemparkan eksepsi dan program akan melompat ke klausa Catch pada baris 44.

Jika file berhasil diciptakan, program akan berlanjut untuk membaca nilai-nilai dari user dan menuliskannya ke dalam file. Loop Do While yang diawali pada baris 24 beriterasi sepanjang nilai intHitung kurang dari intBanyakMaks. Perhatikan bahwa di dalam loop, sebuah statemen Try-Catch diawali pada baris 25, dan kemudian baris 27 menggunakan kotak masukan untuk meminta user memasukkan sebuah integer. Jika user memasukkan nilai tak valid, maka fungsi CInt pada baris 27 akan melemparkan sebuah eksepsi dan program akan melompat ke klausa Catch pada baris 34. Jika user memasukkan integer yang valid, maka pada baris 30 menuliskan integer itu ke dalam file, dan baris 33 menginkremen intHitung. Setelah loop selesai dieksekusi, baris 42 akan menutup file.

Langkah 6: Sekarang lihat event handler tombolBaca_Click, yang ditunjukkan di sini dengan nomor baris sebagai referensi:

55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    Private Sub tombolBaca_Click(…) Handles tombolBaca.Click
        'variabel-variabel lokal
        Dim fileMasukan As StreamReader 'variabel objek
        Dim strMasukan As String        'untuk menampung sebaris masukan

        Try
            'membuka file
            fileMasukan = File.OpenText(strNAMAFILE)

            'membersihkan kotak list
            listKeluaran.Items.Clear()

            'membaca isi file
            Do Until fileMasukan.EndOfStream
                'membaca sebaris data dari file
                strMasukan = fileMasukan.ReadLine()

                'menambahkan baris masukan pada kotak list
                listKeluaran.Items.Add(strMasukan)
            Loop

            'menutup file
            fileMasukan.Close()
        Catch
            'pesan error untuk error pembukaan file
            MessageBox.Show(strNAMAFILE & " tidak dapat dibuka.")
        End Try
    End Sub

Amati kode ini lebih dekat. Berikut adalah simpulan dari deklarasi-deklarasi yang ada pada baris 57 dan baris 58:
·         Baris 57: Variabel fileMasukan adalah sebuah variabel objek yang akan dipakai untuk membuka file dan membaca data darinya.
·         Baris 58: Variabel strMasukan akan menampung sebaris masukan yang dibaca dari file.

Perhatikan bahwa sebuah statemen Try-Catch diawali pada baris 60, dan kemudian pada baris 62 membuka file. Jika file tidak dapat dibuka, metode File.OpenText akan melemparkan eksepsi dan program akan melompat ke klausa Catch pada baris 78. (Ini akan terjadi, misalnya, bila user mengklik tombol Baca File sebelum file diciptakan).

Jika file berhasil dibuka, baris 65 akan membersihkan isi dari kotak list. Kemudian loop Do Until pada baris 68 akan dieksekusi. Loop akan beriterasi sampai properti fileMasukan.EndOfStram bernilai True, yang mengindikasikan bahwa akhir file telah diraih. Selama tiap iterasi loop, baris 70 membaca sebaris data dari file dan menugaskannya kepada variabel strMasukan, dan baris 73 menambahkan strMasukan pada kotak list. Setelah loop selesai dieksekusi, baris 77 menutup file.


Metode-Metode StreamReader Lain
Kelas StreamReader juga menyediakan metode Read dan ReadToEnd, yang akan didiskusikan. Bentuk umum dari metode Read adalah berikut:

VarObjek.Read

VarObjek adalah nama dari sebuah variabel objek StreamReader. Metode Read hanya membaca karakter berikutnya dari sebuah file dan menghasilkan kode integer untuk karakter tersebut. Untuk mengkonversi kode integer menjadi karakter, Anda menggunakan fungsi Chr, seperti ditunjukkan pada kode berikut:

Dim fileTeks As StreamReader
Dim strMasukan As String = String.Empty
fileTeks = File.OpenText("nama.txt")

Do While Not fileTeks.EndOfStream
    strMasukan &= Chr(fileTeks.Read)
Loop

fileTeks.Close()

Kode ini membuka file nama.txt. Loop Do While, yang beriterasi sampai ia meraih akhir dari file, mengeksekusi statemen berikut:

strMasukan &= Chr(fileTeks.Read)

Statemen ini membaca kode integer untuk karakter berikutnya di dalam file, mengkonversinya menjadi sebuah karakter menggunakan fungsi Chr, dan menyambungkan karakter itu ke variabel string strMasukan. Ketika loop selesai dieksekusi, variabel string strMasukan akan memuat isi menyeluruh dari file nama.txt.

Bentuk umum dari metode ReadToEnd adalah berikut:

VarObjek.ReadToEnd

VarObjek adalah nam dari sebuah variabel objek StreamReadr. Metode ReadToEnd membaca dan menghasilkan isi keseluruhan dari sebuah file, diawali dari posisi pembacaan terkini. Berikut adalah contohnya:

Dim fileTeks As StreamReader
Dim strMasukan As String

fileTeks = File.OpenText("nama.txt")
strMasukan = fileTeks.ReadToEnd()
fileTeks.Close()

Statemen strMasukan = teksFile.ReadToEnd() membaca isi file dan menyimpannay ke dalam variabel strMasukan.

Bekerja dengan Array dan File
Penyimpanan isi array ke dalam suatu file adalah hal mudah. Anda menggunakan loop untuk menjejak setiap elemen array, kemudian menuliskan isi array ke dalam file. Sebagai contoh, diasumsikan bahwa sebuah aplikasi memiliki sebuah deklarasi array:

Dim intNilai() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Kode berikut membuka sebuah file dengan nama Nilai.txt dan menuliskan isi dari setiap elemen array intNilai ke dalam file:

Dim fileKeluaran as StreamWriter
fileKeluaran = File.CreateText("Nilai.txt")

For intHitung = 0 To (intNilai.Length – 1)
    fileKeluaran.WriteLine(intNilai(intHitung))
Next

fileKeluaran.Close()

Pembacaan isi file ke dalam sebuah array juga hal yang mudah. Kode berikut membuka file Nilai.txt dan membaca isinya ke dalam elemen-elemen array intNilai:

Dim fileMasukan as StreamReader
fileMasukan = File.OpenText("Nilai.txt")

For intHitung = 0 To (intNilai.Length – 1)
    intNilai(intHitung) = CInt(fileMasukan.ReadLine())
Next

fileMasukan.Close()


7.2 Kontrol OpenFileDialog, SaveFileDialog, FontDialog, dan ColorDialog
KONSEP: VISUAL BASIC menyediakan sejumlah kontrol dialog yang melengkapi aplikasi Anda untuk pembukaan file, penyimpanan file, pemilihan jenis font dan warna.

Sejauh ini, aplikasi-aplikasi pada bab ini yang membuka file menetapkan nama file sebagai bagian dari kode atau mensyaratkan user untuk memasukkan path dan nama file. Hampir semua pengguna Windows terbiasa menggunakan kotak dialog untuk menjelajah disk dalam mencari file untuk dibuka atau untuk menyimpan file. Anda dapat menggunakan kontrol OpenFileDialog dan SaveFileDialog untuk melengkapi aplikasi-aplikasi Anda.

Kontrol OpenFileDialog
Kontrol OpenFileDialog menampilkan sebuah kotak dialog Windows Open standar, seperti yang ditunjukkan pada Gambar 7.15. Kotak dialog Open berguna pada aplikasi-aplikasi yang bekerja dengan file. Kotak dialog ini dapat dipakai user untuk mencari file yang akan dibuka, tanpa perlu mengetikkan nama file dan pathnya.

Gambar 7.15 Kotak dialog Open pada Windows


Menambahkan Kontrol OpenFileDialog Pada Projek Anda
Untuk menempatkan kontrol OpenFileDialog pada sebuah form, Anda mengklik ganda tool OpenFileDialog pada tab Dialogs pada jendela Toolbox. Karena kontrol tidak terlihat pada saat aplikasi dijalankan, ia dimunculkan pada component tray pada saat perancangan. Anda akan menggunakan prefiks ofd ketika menamai kontrol ini.

Menampilkan Kotak Dialog Open
Anda menampilkan kotak dialog Open dengan memanggil metode ShowDialog dari kontrol OpenFileDialog. Berikut adalah bentuk umum dari metode ini:

NamaKontrol.ShowDialog()

NamaKontrol adalah nama dari kontrol OpenFileDialog. Sebagai contoh, diasumsikan bahwa ofdOpenFile adalah nama dari sebuah kontrol OpenFileDialog. Statemen berikut memanggil metode ShowDialog:

ofdOpenFile.ShowDialog()

Metode ShowDialog menghasilkan salah satu nilai, yaitu Windows.Forms.DialogResult.OK atau Windows.Forms.DialogResult.Cancel, yang mengindikasikan tombol mana, OK atau Cancel, yang diklik oleh user untuk menutup kotak dialog. Ketika user memilih sebuah file dengan kotak dialog Open, path dan nama file disimpan di dalam properti Filename.

Kode berikut menampilkan sebuah kotak dialog dan menentukan apakah user telah menyeleksi sebuah file atau tidak. Jika ya, nama file akan ditampilkan berikut:

If ofdOpenFile.ShowDialog() = Windows.Forms.DialogResult.OK Then
    MessageBox.Show(ofdOpenFile.FileName)
Else
    MessageBox.Show("Anda tidak memilih file apapun.")
End If

Properti Filter
Kotak dialog Open memiliki sebuah kotak list Files of type, yang menampilkan sebuah filter yang menetapkan tipe file yang terlihat di dalam kotak dialog. Filter umumnya menggunakan karakter * yang diikuti dengan ekstensi file. Sebagai contoh, filter *.txt menetapkan bahwa hanya file yang diakhiri dengan ekstensi .txt yang akan ditampilkan. Filter *.doc menetapkan bahwa hanya file yang diakhiri dengan ekstensi .doc yang akan ditampilkan. Filter *.* akan menampilkan semua file.

Kotak dialog pada Gambar 7.16 menunjukkan sebuah kotak list dengan filter *.txt dan *.*.

Gambar 7.16 Kotak dialog Open dengan filter *.txt dan *.*


Anda menggunakan properti Filter untuk menetapkan filter pada kotak list Files of type. Properti ini dapat ditetapkan pada jendela Properties pada saat perancangan, atau dengan kode. Ketika menyimpan sebuah nilai pada properti Filter, Anda menyimpan sebuah string yang memuat deskripsi filter dan filter itu sendiri. Deskripsi dan filter dipisahkan dengan simbol |. Sebagai contoh, diasumsikan bahwa sebuah aplikasi memiliki sebuah kontrol OpenFileDialog dengan nama ofdOpenFile. Statemen berikut menetapkan properti Filter untuk file-file teks:

ofdOpenFile.Filter = "File teks (*.txt)|*.txt"

Bagian dari string yang ada sebelum simbol | adalah deskripsi filter, dan ditampilkan pada kotak list Files of type. Bagian dari string yang ada setelah simbol | adalah filter itu sendiri. Pada contoh ini, deskripsi filter adalah File teks (*.txt)  dan filternya adalah *.txt.

Simbol | juga dipakai untuk memisahkan beberapa filter. Sebagai contoh, statemen berikut menyimpan dua filter di dalam ofdOpenFile.Filter: *.txt dan *.*:

ofdOpenFile.Filter = "File teks (*.txt)|*.txt|Semua file (*.*)|*.*"

Deskripsi dari filter pertama adalah File teks (*.txt) dan filternya adalah *.txt. Deskripsi dari filter kedua adalah Semua file (*.*), dan filternya adalah *.*.


Properti InitialDirectory
Secara default, kotak dialog Open menampilkan direktori terkini (atau folder). Anda bisa menetapkan direktori lain agar ditampilkan dengan menetapkan path pada properti InitialDirectory. Sebagai contoh, kode berikut menyimpan path C:\Data pada properti ofdOpenFile.InitialDirectory sebelum menampilkan kotak dialog Open:

ofdOpenFile.InitialDirectory = "C:\Data"
ofdOpenFile.ShowDialog()

Dengan kotak dialog Open ditampilkan, ia menunjukkan isi dari direktori C:\Data.

Properti Title
Anda dapat mengubah teks default yang ditampilkan pada batang judul dari kotak dialog Open dengan menyimpan string di dalam properti Title.

Menggunakan Kotak Dialog Open Untuk Membuka File
Kode berikut mengasumsikan bahwa ofdOpenFile adalah nama dari kontrol OpenFileDialog. Ia mendemonstrasikan bagaimana menetapkan properti Filter, InitialDirectory, dan Title, menampilkan kotak dialog Open, membaca nama file yang dimasukkan oleh user, dan membuka file.

'mengkonfigurasi kotak dialog Open dan menampilkannya dengan
With ofdOpenFile
    .Filter = "File teks (*.txt)|*.txt|Semua file (*.*)|*.*"
    .InitialDirectory = "C:\Data"
    .Title = "Pilih File yang Akan Dibuka"

    If.ShowDialog() = Windows.Forms.DialogResult.OK Then
        fileMasukan = File.OpenText(.Filename)
    End If
End With


Kontrol SaveFileDialog
Kontrol SaveFileDialog menampilkan sebuah kotak dialog Save As standar. Gambar 7.17 menampilkan sebuah contoh dari kotak dialog ini.

Gambar 7.17 Kotak dialog Save As pada Windows


Kotak dialog Save As berguna pada aplikasi-aplikasi yang bekerja dengan file. Kotak ini dapat dipakai user untuk menjelajah disk dan memilih lokasi dan nama file.

Kontrol SaveFileDialog memiliki banyak kesamaan dengan kontrol OpenFileDialog. Anda mengklik ganda pada ikon SaveFileDialog pada jendela Toolbox untuk menempatkan kontrol itu pada form. Karena kontrol tidak terlihat pada saat aplikasi dijalankan, ia dimunculkan pada component tray pada saat perancangan. Anda akan menggunakan prefiks sfd ketika menamai kontrol ini.

Anda menampilkan kotak dialog Save As dengan menampilkan metode ShowDialog dari kontrol SaveAsDialog. Berikut adalah bentuk umum dari metode ini:

NamaKontrol.ShowDialog()

NamaKontrol adalah nama dari kontrol SaveFileDialog. Sebagai contoh, diasumsikan bahwa sfdSaveFile adalah nama dari sebuah kontrol SaveFileDialog. Statemen berikut memanggil metode ShowDialog dari kontrol tersebut:

sfdSaveFile.ShowDialog()

Metode ini menghasilkan salah satu nilai ini: Windows.Forms.DialogResult.OK atau Windows.Forms.DialogResult.Cancel, yang mengindikasikan tombol mana, OK atau Cancel, yang diklik oleh user untuk menutup kotak dialog.

Properti Filename memuat nama file yang diseleksi atau dimasukkan oleh user. Kode berikut mengasumsikan bahwa sfdOpenFile adalah nama dari kontrol SaveFileDialog. Ia mendemonstrasikan bagaimana menetapkan properti Filter, InitialDirectory, dan Title, menampilkan kotak dialog Save As, membaca nama file yang dimasukkan oleh user, dan membuka file.

'mengkonfigurasi kotak dialog Save As dan menampilkannya dengan
With sfdOpenFile
    .Filter = "File teks (*.txt)|*.txt|Semua file (*.*)|*.*"
    .InitialDirectory = "C:\Data"
    .Title = "Simpan File Sebagai"

    If.ShowDialog() = Windows.Forms.DialogResult.OK Then
        fileKeluaran = System.IO.File.OpenText(.Filename)   
    End If
End With



Pada Tutorial 7.4, Anda akan mempelajari kontrol OpenFileDialog dan SaveFileDialog dengan menciptakan sebuah aplikasi editor teks sederhana. Anda juga akan belajar tentang properti MultiLine, properti WordWarp, dan event TextChanged dari kontrol TextBox.

Tutorial 7.4: Menciptakan Sebuah Aplikasi Editor Teks Sederhana
Pada tutorial ini, Anda akan menciptakan sebuah aplikasi pengeditan teks sederhana yang dapat Anda pakai untuk menciptakan dokumen, menyimpannya, dan membuka dokumen yang ada. Aplikasi ini akan menggunakan properti MultiLine dari kontrol TextBox untuk menampung teks dokumen. Aplikasi ini juga akan menggunakan sistem menu yang ditunjukkan pada Gambar 7.18.

Gambar 7.18 Sistem menu editor teks sederhana

Tabel 7.1 mencantumkan item-item menu yang diperlukan, yang menunjukkan isi dari properti Text dan properti ShortcutKeys.

Tabel 7.1 Item-item menu dengan masing-masing properti Text dan ShortcutKeys
Nama Item Menu
Properti Text
Properti ShortcutKeys
mnuFile
mnuFileBaru
mnuFileBuka
mnuFileSimpan
mnuFileSimpanSbg
mnuFileKeluar
mnuHelp
mnuHelpTentang
&File
&Baru
B&uka
&Simpan
S&impan Sbg
&Keluar
&Help
&Tentang
(Tidak ada)
Ctrl + B
Ctrl + U
Ctrl + S
Ctrl + I
Ctrl + K
(Tidak ada)
(Tidak ada)

Langkah 1: Ciptakanlah sebuah projek Windows Forms Application dengan nama Editor Teks Sederhana.

Langkah 2: Tetapkan properti Text untuk form dengan Editor Teks Sederhana. Ciptakanlah sebuah sebuah kontrol MenuStrip pada form dan tambahkan item-item menu seperti dicantumkan apda Tabel 7.1. Tetapkan properti Text dan ShortcutKeys menjadi nilai-nilai yang ditunjukkan pada tabel. Form akan ditampilkan seperti pada Gambar 7.19.

Gambar 7.19 Form awal dari Editor Teks Sederhana


Langkah 3: Tambahkan sebuah kontrol TextBox pada form dengan nama teksDokumen. Kontrol TextBox memiliki sebuah properti Boolean dengan nama MultiLine, yang ditetapkan False secara default. Ketika properti ini ditetapkan True, tinggi dari kontrol TextBox dapat diperbesar dan teksnya dapat menempati ruang banyak baris. Tetapkan properti MultiLine dari kontrol teksDokumen menjadi True. Kontrol TextBox juga memiliki sebuah properti WordWrap yang ketika ditetapkan True, menyebabkan baris teks yang panjang ditempatkan pada baris berikutnya. Secara default, WordWrap ditetapkan True.

Langkah 4: Perbesar ukuran dari kontrol teksDokumen sehingga ia mengisi form, seperti ditunjukkan pada Gambar 7.20.

Gambar 7.20 Form Editor Teks Sederhana dengan kotak teks diperbesar


Langkah 5: Tetapkan properti Anchor dari kontrol teksDokumen menjadi Top, Bottom, Left, Right. Ini akan menyebabkan kontrol TextBox berubah ukuran secara otomatis jika user mengubah ukuran form.

Langkah 6: Tambahkan kontrol OpenFileDialog dan SaveFileDialog pada form. Namai kontrol OpenFileDialog dengan ofdOpenFile dan namai kontrol SaveFileDialog dengan sfdSaveFile.

Langkah 7: Tetapkan properti Title dari kontrol ofdOpenFile menjadi Buka File. Tetapkan properti Title dari kontrol sfdSaveFile menjadi Simpan File Sebagai. Tetapkan properti Filter menjadi File Teks (*.txt)| *.txt untuk kedua kontrol.

Langkah 8: Sekarang Anda telah siap menuliskan kode untuk aplikasi. Di akhir tutorial, Anda akan menemukan semua kode yang diperlukan. Pertama, buka jendela Code dan ketikkan statemen Imports yang ditunjukkan pada baris 1.

Langkah 9: Di dalam deklarasi kelas form, ketikkan komentar dan deklarasi-deklarasi level-kelas yang ditunjukkan pada baris 4 sampai baris 6. Variabel strNamafile akan memuat nama file yang di dalamnya isi dari kotak teks akan disimpan. Variabel blnApaBerubah adalah sebuah flag untuk mengindikasikan apakah isi dari kotak teks telah berubah sejak terakhir kali disimpan. Anda memerlukan flag ini sehingga Anda dapat mengingatkan user setiap kali ia akan membersihkan dokumen tanpa menyimpannya.

Langkah 10: Ketikkan kode untuk prosedur HapusDokumen yang ditunjukkan pada baris 8 sampai baris 17. Prosedur ini membersihkan properti Text dari kontrol teksDokumen, menetapkan strNamafile menjadi sebuah string kosong, dan menetapkan blnApaBerubah menjadi False.

Langkah 11: Ketikkan kode untuk prosedur BukaDokumen yang ditampilkan pada baris 22 sampai baris 46. Prosedur BukaDokumen menampilkan sebuah kotak dialog Open, membuka file yang dipilih oleh user, dan membaca isinya ke dalam kotak teks.

Langkah 12: Ketikkan kode untuk prosedur SimpanDokumen yang ditunjukkan pada baris 50 sampai baris 69. Prosedur SimpanDokumen menyimpan isi dari kotak teks ke dalam file yang ditetapkan oleh variabel strNamafile.

Langkah 13: Sekarang, Anda akan menuliskan kode untuk event handler teksDokumen_TextChanged, yang ditunjukkan pada baris 71 sampai baris 74. Event handler ini akan dieksekusi setiap kali properti Text dari kontrol teksDokumen berubah. Ketika itu terjadi, Anda menetapkan variabel blnApaBerubah menjadi True untuk mengindikasikan bahwa dokumen terkini telah berubah.

Langkah 14: Selanjutnya, tuliskan event-event handler Click untuk item-item menu. Kode untuk semua event handler ditampilkan pada baris 76 sampai baris 141.

Langkah 15: Terakhir, Anda akan menuliskan kode untuk event handler Form1_FormClosing, yang ditunjukkan pada baris 143 sampai baris 157. Tujuan dari event handler ini adalah untuk mengingatkan user jika ia mencoba keluara dari aplikasi tanpa menyimpan isi kotak teks.

Langkah 16: Simpan dan jalankan aplikasi. Jika Anda memasukkan semua kode dengan benar, Anda akan melihat form yang ditunjukkan pada Gambar 7.21. Masukkan teks tertentu pada kotak teks. Ketika selesai, keluar dari aplikasi.

Gambar 7.21 Form Editor Teks Sederhana

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
Imports System.IO

Public Class Form1
    'variabel-variabel level-kelas
    Private strNamafile As String = String.Empty 'nama file dari dokumen
    Dim blnApaBerubah As Boolean = False    'flag ubah file

    Sub HapusDokumen()
        'menghapus isi dari kotak teks
        teksDokumen.Clear()

        'membersihkan nama dokumen
        strNamafile = String.Empty

        'menetapkan blnApaBerubah menjadi False
        blnApaBerubah = False
    End Sub

    'prosedur BukaDokumen membuka file dan
    'memuatnya ke dalam TextBox untuk pengeditan

    Sub BukaDokumen()
        Dim fileMasukan As StreamReader 'variabel objek

        If ofdOpenFile.ShowDialog = Windows.Forms.DialogResult.OK Then
            'membaca nama file yang diseleksi
            strNamafile = ofdOpenFile.FileName

            Try
                'membuka file
                fileMasukan = File.OpenText(strNamafile)

                'membaca isi file ke dalam TextBox
                teksDokumen.Text = fileMasukan.ReadToEnd

                'menutup file
                fileMasukan.Close()

                'memperbarui variabel blnApaBerubah
                blnApaBerubah = False
            Catch
                'pesan error untuk error pembukaan file
                MessageBox.Show("Error ketika membuka file.")
            End Try
        End If
    End Sub

    'prosedur SimpanDokumen menyimpan dokumen

    Sub SimpanDokumen()
        Dim fileKeluaran As StreamWriter 'variabel objek

        Try
            'menciptakan file
            fileKeluaran = File.CreateText(strNamafile)

            'menuliskan TextBox ke file
            fileKeluaran.Write(teksDokumen.Text)

            'menutup file
            fileKeluaran.Close()

            'memperbarui variabel blnApaBerubah
            blnApaBerubah = False
        Catch
            'pesan error ketika menciptakan file
            MessageBox.Show("Error ketika menciptakan file.")
        End Try
    End Sub

    Private Sub teksDokumen_TextChanged(…) Handles teksDokumen.TextChanged
        'mengindikasikan bahwa teks telah berubah
        blnApaBerubah = True
    End Sub

    Private Sub mnuBaru_Click(…) Handles mnuBaru.Click
        'apakah dokumen telah berubah?
        If blnApaBerubah = True Then
            'memastikan sebelum membersihkan dokumen
            If MessageBox.Show("Dokumen belum disimpan. " &
            "Anda yakin?", "Memastikan",
            MessageBoxButtons.YesNo) =
            Windows.Forms.DialogResult.Yes Then
                HapusDokumen()
            End If
        Else
            'dokumen tidak berubah, jadi bersihkan
            HapusDokumen()
        End If
    End Sub

    Private Sub mnuFileBuka_Click(…) Handles mnuFileBuka.Click
        'apakah dokumen telah berubah?
        If blnApaBerubah = True Then
            'memastikan sebelum membersihkan dan mengganti
            If MessageBox.Show("Dokumen belum disimpan. " &
            "Anda yakin?", "Memastikan",
            MessageBoxButtons.YesNo) =
            Windows.Forms.DialogResult.Yes Then
                HapusDokumen()
                BukaDokumen()
            End If
        Else
            'dokumen tidak berubah, jadi ganti
            HapusDokumen()
            BukaDokumen()
        End If
    End Sub

    Private Sub mnuSimpan_Click(…) Handles mnuSimpan.Click
        'apakah dokumen sudah punya nama file?
        If strNamafile = String.Empty Then
            'Dokumen belum disimpan, jadi
            'gunakan kotak dialog Save As
            If sfdSaveFile.ShowDialog = Windows.Forms.DialogResult.OK Then
                strNamafile = sfdSaveFile.FileName
                SimpanDokumen()
            End If
        Else
            'simpan dokumen dengan nama file sekarang
            SimpanDokumen()
        End If
    End Sub

    Private Sub mnuSimpanSbg_Click(…) Handles mnuSimpanSbg.Click
        'menyimpan dokumen dengan nama file baru
        If sfdSaveFile.ShowDialog = Windows.Forms.DialogResult.OK Then
            strNamafile = sfdSaveFile.FileName
            SimpanDokumen()
        End If
    End Sub

    Private Sub mnuKeluar_Click(…) Handles mnuKeluar.Click
        'menutup form
        Me.Close()
    End Sub

    Private Sub mnuHelpTentang_Click(…) Handles mnuHelpTentang.Click
        'menampilkan kotak tentang
        MessageBox.Show("Editor Teks Sederhana Versi 1.0")
    End Sub

    Private Sub Form1_FormClosing(…) Handles MyBase.FormClosing
        'jika dokumen telah dimodifikasi, pastikan
        'sebelum user keluar
        If blnApaBerubah = True Then
            If MessageBox.Show("Dokumen belum disimpan. " &
            "Anda bermaksud membuangnya?",
            "Memastikan",
            MessageBoxButtons.YesNo) =
            Windows.Forms.DialogResult.Yes Then
                e.Cancel = False
            Else
                e.Cancel = True
            End If
        End If
    End Sub
End Class



Kontrol ColorDialog dan FontDialog
Kontrol ColorDialog
Kontrol ColorDilog menampilkan kotak dialog Color Windows standar. Gambar 7.22 menunjukkan kotak dialog Color default di kiri. Ketika user mengklik tombol Define Custom Colors, kotak dialog akan mengekspansi menjadi kotak dialog Color penuh yang ditampilkan di sisi kanan.

Klik kanan pada ikon ColorDialog pada bagian Dialogs pada Jendela Toolbox untuk menempatkan kontrol ini pada form. Karena kontrol ini tidak terlihat pada saat aplikasi dijalankan, ia dimunculkan pada component tray saat perancangan. Anda akan menggunakan prefiks cd untuk menamai kontrol ini.

Gambar 7.22 Kotak dialog Color

Anda menampilkan kotak dialog Color dengan memanggil metode ShowDialog. Sebagai contoh, diasumsikan bahwa cdColor adalah nama dari sebuah kontrol ColorDialog. Statemen berikut memanggil metode ShowDialog dari kontrol tersebut:

cdColor.ShowDialog()

Metode ini menghasilkan salah satu nilai berikut: Windows.Forms.DialogResult.OK atau Windows.Forms.DialogResult.Cancel, yang mengindikasikan tombol mana, OK atau Cancel, yang diklik oleh user untuk menutup kotak dialog ini. Properti Color akan memuat sebuah nilai yang merepresentasikan warna yang dipilih oleh user. Nilai ini dapat dipakai dengan properti-properti kontrol lain yang memengaruhi warna, seperti ForeColor dan BackColor. Sebagai contoh, kode berikut menampilkan kotak dialog Color dan kemudian menetapkan warna teks yang ditampilkan oleh labelPesan menjadi warna yang diseleksi oleh user:

If cdColor.ShowDialog() = Windows.Forms.DialogResult.OK Then
    labelPesan.ForeColor = cdColor.Color
End If

Secara default, hitam awalnya diseleksi ketika kotak dialog Color ditampilkan. Jika Anda ingin menetapkan warna yang berbeda, Anda perlu menetapkan properti Color menjadi nilai warna yang diinginkan. Sebagai contoh, kode berikut menerapkan warna terseleksi menjadi biru:

cdColor.Color = Color.Blue
If cdColor.ShowDialog() = Windows.Forms.DialogResult.OK Then
    labelPesan.ForeColor = cdColor.Color
End If

Kode berikut menetapkan warna terseleksi inisial menjadi warna dari label labelPesan sebelum menampilkan kotak dialog:

cdColor.Color = labelPesan.ForeColor
If cdColor.ShowDialog() = Windows.Forms.DialogResult.OK Then
    labelPesan.ForeColor = cdColor.Color
End If


Kontrol FontDialog
Kontrol FontDialog menampilkan sebuah kotak dialog Font standar. Gambar 7.23 menampilkan sebuah kotak dialog Font default di sisi kiri, dan sebuah kotak dialog Font dengan daftar drop-down Color di sisi kanan.

Gambar 7.23 Kotak dialog Font pada Windows


Anda menampilkan kotak dialog Font dengan memanggil metode ShowDialog. Sebagai contoh, diasumsikan bahwa fdFont adalah nama dari sebuah kontrol FontDialog. Statemen berikut memanggil metode ShowDialog dari kontrol tersebut:

fdFont.ShowDialog()

Metode ini menghasilkan salah satu nilai berikut: Windows.Forms.DialogResult.OK atau Windows.Forms.DialogResult.Cancel, yang mengindikasikan tombol mana, OK atau Cancel, yang diklik oleh user untuk menutup kotak dialog ini. Properti Font akan memuat sebuah nilai yang merepresentasikan pengaturan font yang dipilih oleh user. Sebagai contoh, kode berikut menampilkan kotak dialog Font dan kemudian menetapkan warna teks yang ditampilkan oleh labelPesan menjadi warna yang diseleksi oleh user:

If fdFont.ShowDialog() = Windows.Forms.DialogResult.OK Then
    labelPesan.Font = fdFont.Font
End If

Kode berikut menampilkan sebuah kotak dialog Font dengan sebuah drop-down list untuk warna. Kode kemudian menetampkan font dan warna dari kontrol labelPesan menjadi nilai-nilai yang diseleksi oleh user.

fdFont.ShowColor = True
If fdFont.ShowDialog() = Windows.Forms.DialogResult.OK Then
    labelPesan.Font = fdFont.Font
    labelPesan.ForeColor = fdFont.Color
End If


7.3 Kontrol PrintDocument
KONSEP: Kontrol PrintDocument dapat Anda pakai untuk mengirim keluaran ke printer.

Kontrol PrintDocument memberikan aplikasi Anda kemampuan untuk mencetak keluaran melalui printer. Anda bisa mengklik ganda ikon PrintDocument pada seksi Printing pada jendela Toolbox untuk menempatkan sebuah kontrol PrintDocument pada sebuah form. Karena kontrol ini tidak terlihat pada saat aplikasi dijalankan, ia ditempatkan pada component tray di bawah form saat perancangan. Anda akan menggunakan prefiks pd ketika menamai kontrol ini.

Metode Print dan Event PrintPage
Kontrol PrintDocument memiliki metode Print untuk mengawali proses pencetakan. Bentuk umum dari metode ini adalah berikut:

KontrolPrintDocument.Print()

Ketika metode Print dipanggil, ia memicu event PrintPage. Anda perlu menuliskan kode di dalam event handler PrintPage untuk menginisiasi pencetakan. Untuk menciptakan sebuah event handler PrintPage, Anda mengklik ganda pada kontrol PrintDocument pada component tray. Berikut adalah contohnya:

Private Sub pdPrint_PrintPage(...) Handles pdPrint.PrintPage

End Sub

Di dalam event handler PrintPage, Anda dapat menuliskan kode yang mengirim teks ke printer menggunakan font dan warna tertentu, pada lokasi tertentu. Anda akan menggunakan bentuk umum berikut untuk memanggil metode e.Graphics.DrawString:

e.Graphics.DrawString(String, New Font(NamaFont, Ukuran, Gaya), Brushes.Black, HPos, VPos)

String adalah string yang akan dicetak. NamaFont adalah sebuah string yang memuat nama dari font yang digunakan. Ukuran adalah ukuran dari font dalam dimensi point. Gaya adalah gaya font yang digunakan. Nilai-nilai yang valid dari gaya ini adalah FontStyle.Bold, FontStyle.Italic, FontStyle.Regular, FontStyle.Strikeout, dan FontStyle.Underline. Hpos adalah posisi horisontal dari keluaran. Ini adalah jarak dari keluaran, dalam dimensi point, dari sisi batas kertas. VPos adalah adalah posisi vertikal dari keluaran. Ini adalah jarak dari keluaran, dalam dimensi point, dari batas atas kertas. Argumen Brushes.Black menetapkan bahwa keluaran akan dicetak dengan warna hitam.

Event handler PrintPage berikut mencetak isi dari sebuah kontrol TextBox, teksMasukan, dengan font Times New Roman dengan gaya reguler berukuran 12 titik. Koordinat horisontal dan vertikalnya adalah 10 dan 10.

Private Sub pdPrint_PrintPage(...) Handles pdPrint.PrintPage
    e.Graphics.DrawString(teksMasukan.Text, New Font("Times New Roman",
      12, FontStyle.Regular), Brushes.Black, 10, 10)
End Sub


Event handler PrintPage berikut mencetak string “Laporan Penjualan” dengan gaya tebal berukuran 18 point dengan jenis font Courier. Koordinat horisontal dan vertikalnya adalah 150 dan 80.

Private Sub pdPrint_PrintPage(...) Handles pdPrint.PrintPage
    e.Graphics.DrawString("Laporan Penjualan", New Font("Courier",
      18, FontStyle.Bold), Brushes.Black, 150, 80)
End Sub

Event handler PrintPage berikut mencetak isi dari sebuah file. Asumsikan bahwa strNamafile adalah sebuah variabel string level-kelas yang memuat nama dari file yang isinya akan dicetak.

Private Sub pdPrint_PrintPage(...) Handles pdPrint.PrintPage
    Dim fileMasukan As StreamReader      'variabel objek
    Dim intX As Integer = 10             'koordinat X untuk pencetakan
    Dim intY As Integer = 10             'koordinat Y untuk pencetakan

    Try
        'membuka file
        fileMasukan = File.OpenText(strNamafile)

        'membaca semua baris di dalam file
        Do While Not fileMasukan.EndOfStream
            'mencetak sebaris dari file
            e.Graphics.DrawString(fileMasukan.ReadLine(), New Font
              ("Courier", 10, FontStyle.Regular), Brushes.Black, intX, intY)

            'menambahkan 12 pada intY.
            intY += 12
        Loop

        'menutup file
        fileMasukan.Close()
    Catch
        'pesan error ketika membuka file
        MessageBox.Show("Error: file tidak bisa dibuka.")
    End Try
End Sub

Variabel intX dan intY menetapkan posisi horisontal dan vertikal dari tiap baris dari keluaran yang dicetak. Statemen intY += 12 di dalam loop menambah jarak vertikal dari tiap baris sebesar 12 point dari atas halaman. Keluaran dicetak dengan font berukuran 10 point, jadi ada 2 point jarak antar baris.


Pada Tutorial 7.5, Anda akan memodifikasi aplikasi Editor Teks Sederhana yang telah Anda ciptakan pada Tutorial 7.4 dengan menambahkan sebuah perintah Cetak pada menu File.

Tutorial 7.5: Menambahkan Kapabilitas Pencetakan Pada Aplikasi Editor Teks Sederhana
Langkah 1: Buka projek Editor Teks Sederhana yang Anda ciptakan pada Tutorial 7.4.

Langkah 2: Tambahkan sebuah item menu Cetak dan batang pemisah pada menu File, seperti ditunjukkan pada Gambar 7.24. Untuk menambahkan item menu Cetak, klik kanan pada MenuItem Keluar. Dari menu popup, pilih Insert, kemudian MenuItem. Tetapkan properti Text menjadi &Cetak dan properti Name menjadi mnuFileCetak. Untuk menambahkan batang pemisah, klik kanan pada MenuItem Keluar, dan pilih Insert kemudian Separator.

Gambar 7.24 Item menu Cetak dan batang pemisah yang ditambahkan


Langkah 3: Tambahkan sebuah kontrol PrintDocument pada form. (Kontrol PrintDocument berada pada seksi Printing pada jendela Toolbox). Namai kontrol tersebut dengan pdPrint.

Langkah 4: Klik ganda pada kontrol pdPrint untuk menciptakan sebuah template kode untuk event handler pdPrint_PrintPage. Sempurnakan event handler dengan memasukkan kode berikut yang ditebalkan:

Private Sub pdPrint_PrintPage(…) Handles pdPrint.PrintPage
    'mencetak isi dari kotak teks
    e.Graphics.DrawString(teksDokumen.Text, New Font("MS Sans Serif",
      12, FontStyle.Regular), Brushes.Black, 10, 10)
End Sub

Langkah 5: Tambahkan event prosedur mnuFileCetak_Click berikut:

Private Sub mnuFileCetak_Click(…) Handles mnuFileCetak.Click
    'mencetak dokumen sekarang
    pdPrint.Print()
End Sub

Langkah 6: Simpan dan jalankan aplikasi. Masukkan teks tertentu ke dalam kotak teks atau muat file yang telah ada. Uji perintah Cetak. Isi dari kotak teks akan dicetak pada printer.

Langkah 7: Klik perintah Keluar untuk mengakhiri aplikasi.


7.4 Struktur
KONSEP: Visual Basic dapat Anda pakai untuk menciptakan tipe data Anda sendiri, dimana di dalamnya Anda bisa mengelompokkan sejumlah bidang data.

Sejauh ini, Anda telah menciptakan aplikasi-aplikasi yang memuat data di dalam variabel-variabel individual. Jika Anda ingin mengelompokkan sejumlah item, And dapat menciptakan array. Tetapi, Array mensyaratkan elemen-elemen harus bertipe sama. Kadangkala, ada relasi antar item yang berbeda tipe. Sebagai contoh, sebuah sistem penggajian dapat menggunakan variabel-variabel yang ditunjukkan pada statemen-statemen deklarasi berikut:

Dim intBanyakPekerja As Integer   'banya pekerja
Dim strNamaDepan As String 'nama depan dari pekerja
Dim strNamaBelakang As String     'nama belakang dari pekerja
Dim dblJam As Double              'banyak jam kerja
Dim decGajiPerJam As Decimal      'gaji per jam
Dim decGajiKotor As Decimal       'gaji kotor

Semua variabel ini berelasi karena dapat memuat data tentang pekerja yang sama. Statemen-statemen Dim tersebut menciptakan variabel-variabel terpisah dan tidak memiliki relasi-relasi.

Pada kasus ini, Anda dapat mengelompokkan data yang berelasi. Struktur adalah sebuah tipe data yang dapat Anda ciptakan yang memuat satu atau lebih variabel yang dikenal dengan bidang. Bidang dapat berbeda tipe. Setelah sebuah struktur diciptakan, variabel-variabel dari sebuah struktur dapat dideklarasikan.

Anda menciptakan sebuah struktur pada level-kelas atau level-modul dengan statemen Structure:

[PenspesifikasiAkses] Structure NamaStruktur
    DeklarasiBidang
End Structure

PenspesifikasiAkses ditampilkan di dalam kurung, yang mengindikasikan bahwa ia bersifat opsional (tidak harus ada). Jika Anda menggunakan penspesifikasi akses Public, struktur dapat diakses oleh statemen-statemen yang ada di luar kelas atau modul. Jika Anda menggunakan penspesifikasi akses Private, struktur dapat diakses oleh statemen-statemen yang ada di dalam kelas atau modul yang sama. NamaStruktur adalah nama dari struktur. DeklarasiBidang adalah satu atau lebih deklarasi bidang, seperti statemen-statemen Dim. Berikut adalah sebuah contoh dari struktur:

Structure DataGajiPekerja
    Dim intBanyakPekerja As Integer
    Dim strNamaDepan As String
    Dim strNamaBelakang As String
    Dim dblGaji As Double
    Dim decGajiPerJam As Decimal
    Dim decGajiKotor As Decimal
End Structure

Statemen ini mendeklarasikan sebuah struktur dengan nama DataGajiPekerja, yang memiliki enam bidang.

Statemen Structure tidak menciptakan variabel. Ia menciptakan sebuah tipe data baru dengan memberitahu Visual Basic tentang apa tipe data yang dimuatnya. Anda mendeklarasikan variabel bertipe struktur menggunakan statemen Dim, sama seperti tipe data lain. Sebagai contoh, statemen berikut mendeklarasikan sebuah variabel dengan nama kepalaDept sebagai sebuah variabel DataGajiPekerja:

Dim kepalaDept DataGajiPekerja

Variabel kepalaDept dapat menyimpan enam nilai karena tipe data DataGajiPekerja terdiri-dari enam bidang data, seperti diilustrasikan pada Gambar 7.25.

Gambar 7.25 Variabel kepalaDept bertipe data DataGajiPekerja

Akses terhadap bidang dilakukan menggunakan operator dot. Sebagai contoh, statemen-statemen berikut menugaskan nilai-nilai kepada enam bidang dari variabel kepalaDept:

kepalaDept.intBanyakPekerja = 1101
kepalaDept.strNamaDepan = "John"
kepalaDept.strNamaBelakang = "Kristoff"
kepalaDept.dblJam = 40.0
kepalaDept.decGajiPerJam = 25
kepalaDept.decGajiKotor = CDec(kepalaDept.dblJam) * kepalaDept.decGajiPerJam

Statemen berikut menambahkan bidang intBanyakPekerja pada kotak list listDaftarPekerja:

listDaftarPekerja.Items.Add(kepalaDept.intBanyakPekerja)

Anda dapat secara opsional menggunakan statemen With untuk menyederhanakan akses terhadap bidang-bidang struktur:

With kepalaDept
    .intBanyakPekerja = 1101
    .strNamaDepan = "John"
    .strNamaBelakang = "Kristoff"
    .dblJam = 40.0
    .decGajiPerJam = 25
    .decGajiKotor = CDec(.dblJam) *.decGajiPerJam
End With

Melewatkan Variabel Struktur Kepada Prosedur dan Fungsi
Anda dapat melewatkan variabel struktur kepada prosedur dan fungsi. Sebagai contoh, prosedur berikut mendeklarasikan sebuah parameter DataGajiPekerja, yang dilewatkan dengan referensi:

Sub HitungGaji(ByRef pekerja As DataGajiPekerja)
    'prosedur ini menerima sebuah variabel DataGajiPekerja
    'sebagai argumennya. Gaji kotor pekerja dihitung
    'dan disimpan di dalam bidang decGajiKotor
    With pekerja
        .decGajiKotor =.dblJam * .decGajiPerJam
    End With
End Sub


Array Sebagai Anggota Struktur
Struktur dapat memuat bidang array, tetapi array tersebut tidak dapat ditugasi ukuran awal. Sebuah contohnya ditunjukkan pada statemen berikut:

Structure RekamanSiswa
    Dim strNama As String
    Dim dblSkorUjian() As Double
End Structure

Setelah mendeklarasikan variabel struktur, Anda dapat menggunakan statemen Dim untuk menetapkan ukuran array. Kemudian Anda mengakses elemen-elemen array dengan sebuah subskript, seperti ditunjukkan pada contoh berikut:

Dim siswa As RekamanSiswa
ReDim siswa.dblSkorUjian(4)
siswa.strNama = "John Kristoff"
siswa.dblSkorUjian(0) = 89.0
siswa.dblSkorUjian(1) = 92.0
siswa.dblSkorUjian(2) = 84.0
siswa.dblSkorUjian(3) = 96.0
siswa.dblSkorUjian(4) = 91.0

Array yang Memuat Struktur-Struktur
Anda juga dapat mendeklarasikan sebuah array yang memuat struktur-struktur. Sebagai contoh, statemen berikut mendeklarasikan pekerja sebagai sebuah array yang memuat 10 variabel DataGajiPekerja:

Const intSUBSKRIPT_MAKS As Integer = 9
Dim pekerja(intSUBSKRIPT_MAKS) As DataGajiPekerja

Untuk mengakses elemen-elemen di dalam array, Anda menggunakan subskript seperti ditunjukkan pada statemen beriktu:

pekerja(0).intBanyakPekerja = 1101

Ketika bekerja dengan array yang memuat variabel-variabel struktur dimana di dalamnya struktur memuat sebuah bidang array, Anda menggunakan statemen ReDim untuk menetapkan ukuran untuk bidang array dari tiap elemennya. Sebagai contoh, RekamanSiswa yang didiskusikan sebelumnya memiliki sebuah bidang dengan nama dblSkorUjian, yang merupakan sebuah array dengan 5 elemen. Dimisalkan bahwa sebuah aplikasi mendeklarasikan sebuah array yang memuat variabel-variabel RekamanSiswa sebagai berikut:

Const intSUBSKRIPT_MAKS As Integer = 9
Dim siswa(intSUBSKRIPT_MAKS) As RekamanSiswa

Sebuah loop, seperti berikut, dapat dipakai untuk menetapkan ukuran dari tiap array siswa:

For intIndeks = 0 To intSUBSKRIPT_MAKS
    ReDim siswa(intIndeks).dblSkorUjian(4)
Next

Anda dapat menggunakan bidang-bidang array setelah ia diberikan ukuran. Sebagai contoh, statemen berikut menyimpan 95 pada dblSkorUjian(0) di dalam siswa(5):

siswa(5).dblSkorUjian(0) = 95.0



Tutorial 7.6 memeriksa sebuah aplikasi yang menggunakan struktur.

Tutorial 7.6: Memeriksa Sebuah Aplikasi Dengan Struktur
Pada tutorial ini, Anda memeriksa sebuah versi modifikasi dari projek Demo WriteLine File dari Tutorial 7.1. Versi projek ini menggunakan sebuah struktur untuk menyimpan data teman.

Langkah 1: Buka projek Demo WriteLine File 2.

Langkah 2: Bukan jendela Code. Statemen-statemen berikut mendeklarasikan struktur InfoTeman:

Structure InfoTeman
    Dim strNama As String   'untuk memuat nama teman
    Dim strTelp As String   'untuk memuat nomor telepon
End Structure

Langkah 3: Lihat event handler tombolCiptakan_Click. Prosedur ini menggunakan variabel struktur temanKu untuk memuat nama dan nomor telepon yang dimasukkan oleh user. Statemen fileTeman.WriteLine menuliskan isi dari bidang-bidang variabel struktur ke dalam file.

Private Sub tombolCiptakan_Click(…) Handles tombolCiptakan.Click
    'konstanta untuk banyak teman
    Const intBANYAK_TEMAN As Integer = 3

    'variabel-variabel lokal
    Dim strNamaFile As String       'nama file
    Dim intHitung As Integer        'pencacah loop
    Dim fileTeman As StreamWriter   'variabel objek StreamWriter
    Dim temanKu As InfoTeman        'variabel struktur

    'membaca nama file dari user
    strNamaFile = InputBox("Masukkan nama file.")

    Try
        'membuka file
        fileTeman = File.CreateText(strNamaFile)

        'membaca data dan menuliskannya ke dalam file
        For intHitung = 1 To intBANYAK_TEMAN
            'membaca nama teman
            temanKu.strNama = InputBox("Masukkan nama teman " &
              "nomor " & intHitung.ToString())

            'membaca nomor telepon teman
            temanKu.strTelp = InputBox("Masukkan nomor telepon " &
              "teman.")

            'menuliskan data ke dalam file
            fileTeman.WriteLine(temanKu.strNama)
            fileTeman.WriteLine(temanKu.strTelp)
        Next

        'menutup file
        fileTeman.Close()
    Catch
        'pesan error
        MessageBox.Show("File tidak dapat diciptakan.")
    End Try
End Sub

Langkah 4: Jalankan aplikasi, dan seperi yang Anda lakukan pada Tutorial 7.1.

Langkah 5: Klik tombol Keluar untuk mengakhiri aplikasi.





No comments:

Post a Comment