Saturday, December 24, 2016

Bab 12. Visual Basic .NET Belajar Dari Contoh


12. Berbagai Projek GUI







Pengantar

Bab ini akan melanjutkan diskusi tentang GUI, yang dimulai dengan topi lanjut yang paling sering digunakan, menu. Menu menyajikan beberapa perintah atau opsi kepada pengguna. Kemudian akan didiskusikan bagaimana mengembangkan menu menggunakan beberapa tool yang disediakan Visual Studio .NET. Komponen GUI LinkLabel akan diintroduksi, yang memampukan pengguna untuk mengklik mouse untuk menuju beberapa destinasi.

Selanjutnya akan didemonstrasikan bagaimana memanipulasi sebuah daftar nilai melalui ListBox dan bagaimana menggabungkan beberapa checkbox di dalam sebuah CheckedListBox. Komponen ComboBox dan TreeView juga akan dibahas.


Menu
Menu menyediakan beberapa grup, yang masing-masing memuat beberapa perintah yang berelasi, untuk aplikasi Windows. Meskipun beberapa perintah tersebut bergantung pada program, tetapi perintah, seperti Open dan Save, sangat sering dijumpai pada banyak aplikasi. Menu merupakan bagian integral dari GUI, karena dapat dipakai untuk mengorganisir perintah agar tidak tampak berserakan. Semua item menu dapat memiliki kunci pintas (shortcut) Alt (yang juga dikenal dengan hotkey), yang dapat diakses dengan menekan Alt, seperti Alt + F yang mengakses menu File.


Gambar 12.1 Menu Designer pada Visual Studio

Untuk menciptakan sebuah menu, Anda bisa membuka Toolbox dan menggeret sebuah kontrol MenuStrip ke dalam form. Ini akan menciptakan sebuah menu bar di sisi atas form dan menempatkan sebuah ikon MenuStrip di sisi bawah IDE. Untuk menyelekasi MenuStrip, Anda bisa mengklik ikon ini. Konfigurasi ini dikenal sebagai Menu Designer, yang membolehkan pengguna untuk menciptakan dan mengedit menu. Menu, seperti kontrol lainnya, memiliki beberapa properti, yang dapat diakses melalui jendela Properties atau Menu Designer (Gambar 12.1).

Untuk menambahkan nama perintah, klik kotak teks Type Here (Gambar 12.1) dan ketikkan nama perintah menu. Setiap entri di dalam menu bertipe MenuItem dari namespace System.Windows.Forms. Kemudian, akan muncul beberapa Type Here lagi, seperti terlihat pada Gambar 12.2.


Gambar 12.2 Menambahkan MenuItem pada MenuStrip


Untuk menciptakan access shortcut, Anda bisa menambahkan ampersand (&) di depan karakter. Sebagai contoh, untuk menciptakan item menu File, ketikkan &File. Karakter ampersand ditampilkan dengan mengetikkan &&. Untuk menetapkan beberapa shortcut key yang lain, Anda bisa mengujungi properti Shorcut.

Beberapa properti dan event menu dicantumkan pada Gambar 12.3.

Properti dan event MenuItem
Deskripsi
Properti

MenuItems

RightToLeft


Checked



Index


MenuItems

RadioCheck



Shortcut

ShowShortcut


Text

-----------------------
Event

Click


Mencantumkan beberapa MenuItem yang dimuat di dalam MenuStrip.

Menyebabkan teks ditampilkan dari kanan ke kiri. Berguna untuk beberapa bahasa, seperti bahasa Arab, yang dibaca dari kanan ke kiri.

Mengindikasikan apakah sebuah item menu diseleksi (sesuai dengan properti RadioCheck). Nilai default adalah False, yang berarti bahwa item menu tidak diseleksi.

Menspesifikasi posisi item di dalam menu induk. Nilai 0 menempatkan MenuItem di awal menu.

Mencantumkan beberapa item submenu untuk item menu tertentu.

Menspesifikasi apakah item menu yang diseleksi muncul sebagai tombol radio (lingkaran hitam) atau sebagai checkmark. True akan menampilkan tombol radio, dan False akan menampilkan checkmark; default adalah False.

Menspesifikasi shortcut key untuk item menu.

Mengindikasikan apakah shortcut key ditampilkan di samping teks item menu. Default adalah True, yang menampilkan shortcut key.

Menspesifikasi teks item menu. Untuk menciptakan sebuah access shortcut Alt, dengan mengawali karakter dengan & (misalnya, &File untuk File).
----------------------------------------------------------------------------------------------


Dibangkitkan ketika item diklik atau shortcut key digunakan. Ini merupakan event default ketika menu diklik-ganda pada designer.

Gambar 12.3 Beberapa properti dan event pada MenuItem

Kelas FrmMenu (kode 12.1) menciptakan sebuah menu sederhana pada suatu form. Form tersebut memiliki menu File dengan beberapa item menu Tentang (menampilkan kotak pesan) dan Keluar (menghentikan program). Menu juga memuat sebueh menu Format, yang mengubah teks pada sebuah label. Menu Format memiliki submenu Warna dan Font, yang mengubah warna dan jenis font teks pada label.

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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
' Kode 12.1: UjiMenu.vb
' Menggunakan menu untuk mengubah warna dan jenis font.

Imports System.Windows.Forms

Public Class FrmMenu
    Inherits Form

    ' label
    Friend WithEvents lblTampil As Label

    ' menu utama (memuat menu file dan format)
    Friend WithEvents mnuMainMenu As MainMenu

    ' menu file
    Friend WithEvents mnuFile As MenuItem
    Friend WithEvents mnuitmTentang As MenuItem
    Friend WithEvents mnuitmKeluar As MenuItem

    ' menu format
    Friend WithEvents mnuFormat As MenuItem

    ' submenu warna
    Friend WithEvents mnuitmWarna As MenuItem
    Friend WithEvents mnuitmHitam As MenuItem
    Friend WithEvents mnuitmBiru As MenuItem
    Friend WithEvents mnuitmMerah As MenuItem
    Friend WithEvents mnuitmHijau As MenuItem

    ' submenu font
    Friend WithEvents mnuitmFont As MenuItem
    Friend WithEvents mnuitmTimes As MenuItem
    Friend WithEvents mnuitmCourier As MenuItem
    Friend WithEvents mnuitmComic As MenuItem
    Friend WithEvents mnuitmDash As MenuItem
    Friend WithEvents mnuitmBold As MenuItem
    Friend WithEvents mnuitmItalic As MenuItem

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menampilkan MessageBox
    Private Sub TentangToolStripMenuItem_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles TentangToolStripMenuItem.Click

        MessageBox.Show("Ini adalah contoh" & vbCrLf & _
            " penggunaan menu.", "Tentang", MessageBoxButtons.OK, _
            MessageBoxIcon.Information)
    End Sub  ' TentangToolStripMenuItem_Click

    ' keluar program
    Private Sub KeluarToolStripMenuItem_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles KeluarToolStripMenuItem.Click

        Application.Exit()
    End Sub  ' KeluarToolStripMenuItem_Click

    ' mereset warna font
    Private Sub HapusWarna()

        ' menghapus semua checkmark
        mnuitmHitam.Checked = False
        mnuitmBiru.Checked = False
        mnuitmMerah.Checked = False
        mnuitmHijau.Checked = False
    End Sub ' HapusWarna

    ' memperbarui keadaan menu dan mewarnai hitam
    Private Sub mnuitmHitam_Click(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) Handles mnuitmHitam.Click

        ' mereset checkmark untuk item-item menu warna
        HapusWarna()

        ' menetapkan warna menjadi hitam
        lblTampil.ForeColor = Color.Black
        mnuitmHitam.Checked = True
    End Sub  ' mnuitmHitam_Click

    ' memperbarui keadaan menu dan mewarnai biru
    Private Sub mnuitmBiru_Click(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) Handles mnuitmBiru.Click

        ' mereset checkmark untuk item-item menu warna
        HapusWarna()

        ' menetapkan warna menjadi hitam
        lblTampil.ForeColor = Color.Blue
        mnuitmBiru.Checked = True
    End Sub  ' mnuitmBiru_Click

    ' memperbarui keadaan menu dan mewarnai merah
    Private Sub mnuitmMerah_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles mnuitmMerah.Click

        ' mereset checkmark untuk item-item menu warna
        HapusWarna()

        ' menetapkan warna menjadi hitam
        lblTampil.ForeColor = Color.Red
        mnuitmMerah.Checked = True
    End Sub  ' mnuitmMerah_Click

    ' memperbarui keadaan menu dan mewarnai hijau
    Private Sub mnuitmHijau_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles mnuitmHijau.Click

        ' mereset checkmark untuk item-item menu warna
        HapusWarna()

        ' menetapkan warna menjadi hitam
        lblTampil.ForeColor = Color.Green
        mnuitmHijau.Checked = True
    End Sub  ' mnuitmHijau_Click

    ' reset jenis font
    Private Sub HapusFont()

        ' menghapus semua checkmark
        mnuitmTimes.Checked = False
        mnuitmCourier.Checked = False
        mnuitmComic.Checked = False
    End Sub ' HapusFont

    ' memperbarui keadaan menu dan menetapkan font menjadi Times New Roman
    Private Sub mnuitmTimes_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles mnuitmTimes.Click

        ' mereset checkmark untuk item-item menu font
        HapusFont()

        ' menetapkan font menjadi Times New Roman
        mnuitmTimes.Checked = True
        lblTampil.Font = New Font("Times New Roman", 48, _
        lblTampil.Font.Style)
    End Sub  'mnuitmTimes_Click

    ' memperbarui keadaan menu dan menetapkan font menjadi Courier
    Private Sub mnuitmCourier_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles mnuitmCourier.Click

        ' mereset checkmark untuk item-item menu font
        HapusFont()

        ' menetapkan font menjadi Times New Roman
        mnuitmTimes.Checked = True
        lblTampil.Font = New Font("Courier New", 48, _
        lblTampil.Font.Style)
    End Sub  ' mnuitmCourier_Click

    ' memperbarui keadaan menu dan menetapkan font menjadi Comic Sans
    Private Sub mnuitmComic_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles mnuitmComic.Click

        ' mereset checkmark untuk item-item menu font
        HapusFont()

        ' menetapkan font menjadi Times New Roman
        mnuitmTimes.Checked = True
        lblTampil.Font = New Font("Comic Sans MS", 48, _
        lblTampil.Font.Style)
    End Sub  ' mnuitmComic_Click

    ' toggle checkmark dan menetapkan gaya font tebal
    Private Sub TebalToolStripMenuItem_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles mnuitmTebal.Click

        ' toggle checkmark
        mnuitmTebal.Checked = Not mnuitmTebal.Checked

        ' menggunakan Xor untuk mentoggle
        lblTampil.Font = New Font( _
            lblTampil.Font.FontFamily, 48, _
            lblTampil.Font.Style Xor FontStyle.Bold)
    End Sub  ' TebalToolStripMenuItem_Click

    ' toggle checkmark dan menetapkan gaya font miring
    Private Sub MiringToolStripMenuItem_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles mnuitmMiring.Click

        ' toggle checkmark
        mnuitmMiring.Checked = Not mnuitmMiring.Checked

        ' menggunakan Xor untuk mentoggle
        lblTampil.Font = New Font( _
            lblTampil.Font.FontFamily, 48, _
            lblTampil.Font.Style Xor FontStyle.Italic)
    End Sub  ' MiringToolStripMenuItem_Click

End Class  ' FrmMenu
  


Gambar 12.4 Keluaran program pada kode 12.1


Anda memulainya dengan menggeret MenuStrip dari ToolBox ke dalam form. Kemudian, struktur  menu secara keseluruhan diciptakan menggunakan Menu Designer. Menu File (mnuFile, baris 16) memiliki item Tentang (mnuitmTentang, baris 17) dan Keluar (mnuitmKeluar, baris 18); menu Format (mnuFormat, baris 21) memiliki dua submenu. Submenu pertama, Warna (mnuitmWarna, baris 24), memuat item menu Hitam (mnuitmHitam, baris 25), Biru (mnuitmBiru, baris 26), Merah (mnuitmMerah, baris 27), dan Hijau (mnuitmHijau, baris 28). Submenu kedua, Font (mnuitmFont, baris 31), memuat item-item menu Times New Roman (mnuitmTimes, baris 32), Courier (mnuitmCourier, baris 33), Comic Sans (mnuitmComic, baris 34), Tebal (mnuitmTebal, baris 36), dan Miring (mnuitmMiring, baris 37).

Item menu Tentang pada menu File menampilkan sebuah MessageBox ketika diklik (baris 46-48). Item menu Keluar menutup aplikasi melalui metode Shared Exit dari kelas Application (baris 56). Metode-metode Shared pada kelas Application mengendalikan eksekusi program. Metode Exit menyebabkan aplikasi berhenti.

Anda membuat item-item pada submenu Warna (Hitam, Biru, Merah, dan Hijau) menjadi ekslusif secara mutual, dimana pengguna hanya dapat memilih satu warna pada suatu waktu. Untuk mengindikasikan fakta ini kepada pengguna, properti RadioCheck pada tiap item menu Warna ditetapkan menjadi True. Ini menyebabkan sebuah tombol radio muncul ketika pengguna menyeleksi sebuah item menu Warna.

Setiap item menu Warna memiliki event handler sendiri. Handler untuk warna Hitam adalah mnuitmHitam_Click (baris 70-79). Sama halnya, event handler untuk warna Biru, Merah, dan Hijau adalah mnuitmBiru_Click (baris 82-91), mnuitmHitam_Click (baris 94-103), dan mnuitmHitam_Click (baris 106-115). Setiap item menu Warna harus eksklusif secara mutual, sehingga event handler memanggil metode HapusWarna (baris 60-67) sebelum menetapkan properti Checked menjadi True. Metode HapusWarna menetapkan properti Checked untuk tiap warna menjadi False, untuk mencegah lebih dari satu item menu diseleksi pada waktu yang bersamaan.

Menu Font memuat tiga item menu untuk tipe font (Courier, Times New Roman, dan Comic Sans) dan dua item menu untuk gaya font (Tebal dan Miring). Event handler untuk item-item menu tipe-font Times New Roman, Courier, dan Comic Sans adalah mnuitemTimes_Click (baris 127-137), mnuitmCourier_Click (baris 140-150), dan mnuitmComic_Click (baris 153-163). Semua event handler ini berperilaku sama dengan event handler untuk item menu Warna. Setiap item menu Font harus eksklusif secara mutual, sehingga event handler memanggil metode HapusWarna (baris 118-124) sebelum menetapkan properti Checked menjadi True. Metode HapusWarna menetapkan properti Checked untuk tiap warna menjadi False, untuk mencegah lebih dari satu item menu diseleksi pada waktu yang bersamaan.


LinkLabel
Kontrol LinkLabel menampilkan link ke sumber lain, seperti file atau halaman Web. LinkLabel ditampilkan sebagai teks yang bergaris-bawah (berwarna biru secara default). Ketika mouse bergerak ke arah link tersebut, pointer berubah menjadi bentuk tangan; ini sama dengan watak hyperlink pada halaman Web. Link dapat berubah warna untuk mengindikasikan bahwa link tersebut baru, baru saja dikunjungi, atau aktif. Ketika diklik, LinkLabel membangkitkan event LinkClicked. Kelas LinkLabel diderivasi dari kelas Label dan mewarisi semua fungsionalitas kelas Label.

Properti dan event LinkLabel
Deskripsi
Properti

ActiveLinkColor


LinkArea

LinkBehavior


LinkColor


Links


LinkVisited



Text

UseMnemonic

VisitedLinkColor
-----------------------
Event

LinkClicked


Menspesifikasi warna dari link yang aktif ketika diklik. Warna merah adalah warna default.

Menspesifikasi bagian teks dimana LinkLabel adalah bagian dari link.

Menspesifikasi watak link, seperti bagaimana penampakan link ketika mouse digerakkan ke atasnya.

Menspesifikasi warna asli dari semua link sebelum dikunjungi. Biru adalah warna default.

Mencantumkan objek-objek LinkLabel.Link, yang merupakan semua link yang dimuat di dalam LinkLabel.

Jika True, link tampak seperti telah dikunjungi (warnanya berubah menjadi warna yang dispesifikasi oleh properti VisitedLinkColor). Nilai default adalah False.

Menspesifikasi teks pada kontrol.

Jika True, karakter & di dalam properti Text berperan sebagai shortcut.

Menspesifikasi warna link yang dikunjungi. Ungu adalah warna default.
----------------------------------------------------------------------------------------------


Dibangkitkan ketika link diklik. Ini adalah event default ketika kontrol diklik-ganda pada designer.

Gambar 12.5 Beberapa properti dan event pada LinkLabel

Kelas FrmLinkLabel (kode 12.2) menggunakan tiga LinkLabel, untuk menghubungkan ke drive C:, Website Kompas (www.kompas.com), dan aplikasi Notepad. Properti Text pada LinkLabel, lnklblCDrive (baris 10), lnklblKompas (baris 11), dan lnklblNotepad (baris 12) mendeskripsikan setiap tujuan link.

Event handler untuk instans LinkLabel memanggil metode Start dari kelas Process (namespace System.Diagnostics). Metode ini membolehkan Anda untuk mengeksekusi program lain dari aplikasi Anda. Metode Start dapat mengambil sebagai argumen file yang akan dibuka (sebuah String) atau aplikasi yang akan dijalankan dan argumen command-line (dua String). Argumen-argumen pada metode Start berformat sama dengan perintah Run pada Windows. Untuk aplikasi, ekstensi .exe dapat diabaikan.

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
' Kode 12.2: UjiLinkLabel.vb
' Menggunakan LinkLabel untuk menciptakan hyperlink.

Imports System.Windows.Forms

Public Class FrmLinkLabel
    Inherits Form

    ' linklabel untuk drive C:\, www.kompas.com dan Notepad
    Friend WithEvents lnklblCDrive As LinkLabel
    Friend WithEvents lnklblKompas As LinkLabel
    Friend WithEvents lnklblNotepad As LinkLabel

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menjelajah drive C:\
    Private Sub lnklblCDrive_LinkClicked(ByVal sender As  _
        System.Object, ByVal e As  _
        System.Windows.Forms.LinkLabelLinkClickedEventArgs) _
        Handles lnklblCDrive.LinkClicked

        lnklblCDrive.LinkVisited = True
        System.Diagnostics.Process.Start("C:\")
    End Sub  ' lnklblCDrive_LinkClicked

    ' mengunjungi www.kompas.com pada Web browser
    Private Sub lnklblKompas_LinkClicked(ByVal sender As  _
        System.Object, ByVal e As  _
        System.Windows.Forms.LinkLabelLinkClickedEventArgs) _
        Handles lnklblKompas.LinkClicked

        lnklblKompas.LinkVisited = True
        System.Diagnostics.Process.Start( _
            "IExplore", "http://www.kompas.com")
    End Sub  ' lnklblKompas_LinkClicked

    ' menjalankan aplikasi Notepad
    Private Sub lnklblNotepad_LinkClicked(ByVal sender As  _
        System.Object, ByVal e As  _
        System.Windows.Forms.LinkLabelLinkClickedEventArgs) _
        Handles lnklblNotepad.LinkClicked

        lnklblNotepad.LinkVisited = True

        ' menjalankan aplikasi notepad
        ' full path tidak dibutuhkan
        System.Diagnostics.Process.Start("notepad")
    End Sub  ' lnklblNotepad_LinkClicked

End Class  ' FrmLinkLabel



Gambar 12.6 Keluaran program pada kode 12.2


ListBox dan CheckedListBox
Kontrol ListBox membolehkan pengguna dalam melihat dan memilih beberapa item pada sebuah daftar. ListBox adalah entitas GUI statis, yang berarti bahwa pengguna tidak dapat menambahkan beberapa item pada daftar, kecuali jika aplikasi menambahkannya secara programatikal.


Gambar 12.7 ListBox dan CheckedListBox pada sebuah form


Kontrol CheckedListBox memperluas atau mengembangkan ListBox dengan menyertakan sebuah checkbox di samping setiap item di dalam daftar. Hal ini memampukan pengguna untuk memilih beberapa item sekaligus, sama seperti kontrol CheckBox (pengguna juga dapat memilih beberapa item sekaligus pada ListBox, meskipun tidak secar default). Gambar 12.7 menampilkan ListBox dan CheckedListBox. Pada kedua kontrol, scrollbar muncul jika jumlah item melebihi area yang tersedia pada ListBox dan CheckedListBox. Gambar 12.8 mencantumkan beberapa properti, metode, dan event ListBox.

Properti, metode, dan event ListBox
Deskripsi
Properti

Items

MultiColumn


SelectedIndex



SelectedIndices


SelectedItem



SelectedItems

SelectionMode





Sorted


-----------------------
Metode

GetSelected

-------------------------
Event

SelectedIndex-
Changed


Koleksi item pada ListBox.

Mengindikasikan apakah ListBox dapat memecah daftar menjadi beberapa kolom. Kolom jamak mengeliminasi kebutuhan scrollbar vertikal.

Menghasilkan indeks dari item yang diseleksi. Jika pengguna memilih beberapa item, properti ini secara acak menghasilkan salah satu indeks yang dipilih; jika tidak ada item yang diseleksi, properti menghasilkan -1.

Menghasilkan sebuah koleksi yang memuat beberapa indeks dari semua item yang diseleksi.

Menghasilkan sebuah referensi yang menunjuk ke item yang dipilih (jika terdapat beberapa item yang diseleksi, ia menghasilkan item dengan nomor indeks terendah).

Menghasilkan sebuah koleksi yang memuat item-item yang diseleksi.

Menentukan jumlah item yang dapat diseleksi, dan cara dimana beberapa item dapat diseleksi sekaligus. Nilai None, One, MultiSimple (beberapa seleksi diijinkan) atau MultiExtended (beberapa seleksi diijinkan menggunakan kombinasi kunci arrow atau klik mouse dan kunci Shift dan Control).

Mengindikasikan apakah item-item yang dipilih diurutkan secara alfabetikal. Penetapan nilai properti ini menjadi True akan mengurutkannya. Nilai default adalah False.
----------------------------------------------------------------------------------------------


Mengambil sebuah indeks sebagai argumen, dan menghasilkan True jika item terkait diseleksi.
----------------------------------------------------------------------------------------------


Dibangkitkan ketika indeks yang diseleksi berubah. Ini adalah event default ketika kontrol diklik-ganda pada designer.

Gambar 12.8 Beberapa properti, metode, dan event ListBox.


Kode 12.3 menggunakan kelas FrmListBox untuk menambah, menghapus, dan membersihkan item-item  dari ListBox listTampil (baris 10). Kelas FrmListBox menggunakan TextBox txtMasukan (baris 13) untuk membolehkan pengguna dalam mengetikkan item baru. Ketika pengguna mengklik tombol Tambah (cmdTambah pada baris 16), item baru akan muncul pada lstTampil. Sama halnya, jika pengguna menyeleksi sebuah item dan mengklik Hapus (cmdHapus pada baris 17), maka item tersebut akan terhapus. Ketika diklik, Bersih (cmdBersih pada baris 18) akan menghapus semua entri pada lstTampil. Pengguna dapat menghentikan aplikasi dengan mengklik Keluar (cmdKeluar pada baris 19).

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
' Kode 12.3: UjiListBox.vb
' Program untuk menambah, menghapus, dan membersihkan item pada ListBox.

Imports System.Windows.Forms

Public Class FrmListBox
    Inherits Form

    ' memuat daftar elemen oleh pengguna
    Friend WithEvents lstTampil As ListBox

    ' user-input textbox
    Friend WithEvents txtMasukan As TextBox

    ' tombol menambah, menghapus, membersihkan, dan keluar
    Friend WithEvents cmdTambah As Button
    Friend WithEvents cmdHapus As Button
    Friend WithEvents cmdBersih As Button
    Friend WithEvents cmdKeluar As Button

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menambah item baru (teks dari kotak masukan) dan membersihkan kotak masukan
    Private Sub cmdTambah_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdTambah.Click

        lstTampil.Items.Add(txtMasukan.Text)
        txtMasukan.Text = ""
    End Sub  ' cmdTambah_Click

    ' menghapus item jika diseleksi
    Private Sub cmdHapus_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdHapus.Click

        ' menghapus hanya jika item diseleksi
        If lstTampil.SelectedIndex <> -1 Then
            lstTampil.Items.RemoveAt(lstTampil.SelectedIndex)
        End If

    End Sub  ' cmdHapus_Click

    ' menghapus semua item
    Private Sub cmdBersih_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdBersih.Click

        lstTampil.Items.Clear()
    End Sub  ' cmdBersih_Click

    ' keluar aplikasi
    Private Sub cmdKeluar_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdKeluar.Click

        Application.Exit()
    End Sub  ' cmdKeluar_Click

End Class  ' FrmListBox



Gambar 12.9 Keluaran program pada kode 12.3


Event handler cmdTambah_Click (baris 24-29) memanggil metode Add dari koleksi Items pada ListBox. Metode ini mengambil sebuah String sebagai item yang akan ditambahkan pada lstTampil. Pada kasus ini, String yang digunakan adalah teks masukan pengguna, atau txtMasukan.Text (baris 27). Setelah item ditambahkan, txtMasukan.Txt dibersihkan (baris 28).

Event handler cmdHapus_Click (baris 32-40) memanggil metode Remove dari koleksi Items. Event handler cmdHapus_Click pertama-tama menggunakan properti SelectedIndex dalam menentukan indeks mana yang akan dihapus. Kecuali jika SelectedIndex kosong (-1) (baris 36), maka handler akan menghapus item yang berkaitan dengan indeks yang dipilih.

Event handler cmdBersih_Click (baris 43-47) memanggil metode Clear dari koleksi Items (baris 46). Ini akan menghapus semua entri pada lstTampil. Terakhir, event handler cmdKeluar_Click (baris 50-54) menghentikan aplikasi, dengan memanggil metode Application.Exit (baris 53).

Kontrol CheckedListBox diderivasi dari kelas ListBox dan menyertakan sebuah sebuah checkbox di samping setiap item. Seperti pada ListBox, item dapat ditambahkan menggunakan metode Add dan AddRange atau melalui String Collection Editor. CheckedListBox mengimplikasikan bahwa beberapa item dapat diseleksi bersamaan, dan beberapa nilai yang mungkin untuk properti SelectionMode adalah None dan One. Nilai One mengijinkan seleksi jamak (beberapa seleksi), karena tidak ada pembatasan. Pengguna dapat memilih sebanyak mungkin item yang diperlukan. Beberapa properti dan event dari CheckedListBox dicantumkan pada Gambar 12.10.

Event ItemCheck dibangkitkan ketika pengguna mencentang atau tidak mencentang sebuah item CheckedListBox. Properti argumen event CurrentValue dan NewValue menghasilkan nilai CheckState untuk keadaan sekarang dan keadaan baru dari item. Pembandingan nilai-nilai tersebut memampukan programer untuk menentukan apakah item CheckedListBox dipilih atau tidak dipilih (dicentang atau tidak dicentang). Kontrol CheckedListBox mendapatkan properti SelectedItems dan SelectedIndices (yang diwarisi dari kelas ListBox). Kontrol ini juga mencakup properti CheckedItems dan CheckedIndices, yang menghasilkan informasi tentang item dan indeks yang dicentang.

Properti, metode, dan event ListBox

Deskripsi
Properti

CheckedItems


CheckedIndices


SelectionMode



CurrentValue



Index

NewValue
-----------------------
Metode
GetItemChecked

-------------------------
Event
ItemCheck


Memuat koleksi item yang dicentang. Ini membedakannya dari item yang diseleksi, yang diterangi (highlighted, tetapi tidak dicentang).

Menghasilkan indeks dari semua item yang dicentang. Ini tidak sama dengan indeks yang diseleksi.

Menentukan berapa banyak item yang dicentang. Nilai-nilai yang mungkin adalah One (mengijinkan beberapa item dicentang sekaligus) atau None (tidak mengijinkan satupun item dicentang).

Mengindikasikan apakah item sekarang dicentang atau tidak dicentang. Nilai-nilai yang mungkin adalah Checked, Unchecked, dan Indeterminate.

Menghasilkan indeks dari item yang berubah.

Menspesifikasi keadaan baru dari item.
----------------------------------------------------------------------------------------------

Mengambil sebuah indeks sebagai argumen dan menghasilkan True jika item terkait dicentang.


Dibangkitkan ketika sebuah item dicentang atau tidak dicentang.

Gambar 12.10 Beberapa properti, metode, dan event CheckedListBox.


Pada kode 12.4, kelas FrmCheckedListBox menggunakan sebuah CheckedListBox dan sebuah ListBox untuk menampilkan daftar buku pilihan pengguna. CheckedListBox, dinamai chklstMasukan (baris 10), mengijinkan pengguna memilih beberapa judul buku. Pada String Collection Editor, item-item yang ditambahkan: C++, Java, Visual Basic, C Sharp, MATLAB, Perl, Delphi, dan Python. ListBox, dinamai lstTampil (baris 13), menampilkan pilihan pengguna. Pada screenshot, CheckedListBox ditempatkan di sebelah kiri, ListBox di sebelah kanan.

Ketika pengguna mencentang atau tidak mencentang sebuah item pada CheckedListBox chklstMasukan, sebuah event ItemCheck dibangkitkan. Event handler chklstMasukan (baris 18-34 menangani event ini.  Struktur kontrol If/Else (baris 28-32) menentukan apakah pengguna mencentang atau tidak mencentang sebuah item pada CheckedListBox.

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
' Kode 12.4: UjiCheckedListBox.vb
' Menggunakan CheckedListBox untuk menambahkan item.

Imports System.Windows.Forms

Public Class FrmCheckedListBox
    Inherits Form

    ' daftar judul buku yang tersedia
    Friend WithEvents chklstMasukan As CheckedListBox

    ' menggunakan daftar seleksi
    Friend WithEvents lstTampil As ListBox

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' item akan dibuah, ditambahkan, atau dihapus dari lstTampil
    Private Sub chklstMasukan_SelectedIndexChanged( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles chklstMasukan.SelectedIndexChanged

        ' mendapatkan referensi dari item yang diseleksi
        Dim item As String = chklstMasukan.SelectedItem

        ' jika item dicentang, ditambahkan pada listbox
        ' sebaliknya dihapus dari listbox
        If e.NewValue = CheckState.Checked Then
            lstTampil.Items.Add(item)
        Else
            lstTampil.Items.Remove(item)
        End If

    End Sub  ' chklstMasukan_SelectedIndexChanged

End Class  ' FrmCheckedListBox



Gambar 12.11 Keluaran program pada kode 12.4


ComboBox
Kontrol ComboBox mengkombinasikan fitur-fitur TextBox dengan sebuah drop-down list. Drop-down list adalah sebuah komponen GUI yang memuat sebuah daftar, dimana di dalamnya sebuah nilai dapat diseleksi. Secara default, pengguna dapat memasukkan teks ke dalam kotak teks atau mengklik anak-panah bawah untuk menampilkan item-item yang telah didefinisikan. Jika pengguna memilih sebuah elemen dari daftar tersebut, elemen tersebut ditampilkan pada kotak teks. Jika daftar tersebut memuat lebih banyak elemen dari yang bisa ditampilkan, maka scrollbar akan muncul dengan sendirinya.

Kelas FrmComboBox (kode 12.5) memampukan pengguna untuk menyeleksi sebuah bangun untuk digambarkan menggunakan ComboBox. Kotak combo pada contoh ini tidak bisa diedit, sehingga pengguna tidak bisa memasukkan item sendiri.

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
' Kode 12.5: UjiComboBox.vb
' Menggunakan ComboBox untuk menyeleksi bangun untuk digambarkan.

Imports System.Windows.Forms
Imports System.Drawing

Public Class FrmComboBox
    Inherits Form

    ' memuat daftar bangun (lingkaran, persegi, elips, dan pie)
    Friend WithEvents cboCitra As ComboBox

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' mendapatkan indeks, menggambar bangun
    Private Sub cboCitra_SelectedIndexChanged( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles cboCitra.SelectedIndexChanged

        ' menciptakan objek Graphics, pen dan brush
        Dim grafikKu As Graphics = MyBase.CreateGraphics()

        ' menciptakan Pen menggunakan warna DarkRed
        Dim penKu As New Pen(Color.DarkRed)

        ' menciptakan SolidBrush menggunakan warna DarkRed
        Dim solidBrushKu As New SolidBrush(Color.DarkRed)

        ' membersihkan area penggambaran dengan menetapkannya menjadi putih
        grafikKu.Clear(Color.White)

        ' menemukan indeks, menggambar bangun yang diinginkan
        Select Case cboCitra.SelectedIndex

            Case 0 ' kasus lingkaran diseleksi
                grafikKu.DrawEllipse(penKu, 50, 50, 150, 150)

            Case 1 ' kasus persegi diseleksi
                grafikKu.DrawRectangle(penKu, 50, 50, 150, 150)

            Case 2 ' kasus elips diseleksi
                grafikKu.DrawEllipse(penKu, 50, 85, 150, 115)

            Case 3 ' kasus pie diseleksi
                grafikKu.DrawPie(penKu, 50, 50, 150, 150, 0, 45)

            Case 4 ' kasus lingkaran terisi diseleksi
                grafikKu.FillEllipse( _
                solidBrushKu, 50, 50, 150, 150)

            Case 5 ' kasus persegi terisi diseleksi
                grafikKu.FillRectangle( _
                solidBrushKu, 50, 50, 150, 150)

            Case 6 ' kasus elips terisi diseleksi
                grafikKu.FillEllipse( _
                solidBrushKu, 50, 85, 150, 115)

            Case 7 ' kasus pie terisi diseleksi
                grafikKu.FillPie( _
                solidBrushKu, 50, 50, 150, 150, 0, 45)

        End Select

    End Sub  ' cboCitra_SelectedIndexChanged

End Class  ' FrmComboBox


Gambar 12.12 Keluaran program pada kode 12.5


TreeView
Kelas FrmTreeViewDirectory (kode 12.6) menggunakan TreeView dalam menampilkan struktur direktori pada sebuah komputer. Simpul akar adalah drive C:\, dan setiap subfolder dari C:\ menjadi simpul anak. Ini sama dengan yang digunakan pada Windows Explorer. Semua folder dapat diekspansi atau dilipat menggunakan pengklikan.

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
' Kode 12.6: UjiTreeViewDirectoryStructure.vb
' Menggunakan TreeView untuk menampilkan struktur direktori.

Imports System.Windows.Forms
Imports System.IO

Public Class FrmTreeViewDirectory
    Inherits Form

    ' memuat struktur direktori drive c:\
    Friend WithEvents pohonDirektori As TreeView

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menambah semua subfolder dari nilaiDirektori ke simpulInduk
    Private Sub TampilkanTreeView(ByVal nilaiDirektori As String, _
        ByVal simpulInduk As TreeNode)

        ' mengisi simpul sekarang dengan subdirektori
        Try

            ' mendapatkan semua subfolder
            Dim arrayDirektori As String() = _
                Directory.GetDirectories(nilaiDirektori)

            If arrayDirektori.Length <> 0 Then ' jika sedikitnya satu

                Dim direktoriSekarang As String

                ' untuk setiap subdirektori, ciptakan new TreeNode,
                ' sebagai anak dari simpul sekarang dan
                ' secara rekursif mengisi simpul-simpul anak dengan subdirektori
                For Each direktoriSekarang In arrayDirektori

                    ' menciptakan TreeNode untuk simpul sekarang
                    Dim simpulKu As TreeNode = _
                        New TreeNode(direktoriSekarang)

                    ' menambahkan simpul direktori sekarang ke simpul induk
                    simpulInduk.Nodes.Add(simpulKu)

                    ' secara rekursif mengisi setiap direktori
                    TampilkanTreeView(direktoriSekarang, simpulKu)
                Next

            End If

            ' menangkap exception
        Catch unauthorized As UnauthorizedAccessException
            simpulInduk.Nodes.Add("Akses Ditolak")
        End Try

    End Sub ' TampilkanTreeView

    ' dipanggil oleh sistem
    Private Sub FrmTreeViewDirectory_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        ' menambahkan drive c:\ drive ke pohonDirektori
        pohonDirektori.Nodes.Add("C:\")
        TampilkanTreeView("C:\", pohonDirektori.Nodes(0))
    End Sub ' FrmTreeViewDirectory_Load

End Class  ' FrmTreeViewDirectory



Gambar 12.13 Keluaran program pada kode 12.6


Kontrol Tab
Programer dapat menambahkan TabControl secara visual dengan menggeretnya ke dalam sebuah form. Untuk menambahkan TabPage pada Visual Studio .NET, Anda bisa mengklik-kanan TabControl, dan memilih Add Tab (Gambar 12.14).

Kelas FrmTab (kode 12.7) menggunakan sebuah TabControl untuk menampilkan berbagai opsi yang berkaitan dengan teks pada label (Warna, Ukuran, dan Pesan). TabPage terakhir menampilkan pesan Tentang, yang mendeskripsikan kegunaan TabControl.


Gambar 12.14 Cara penambahan TabPage pada TabControl


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
' Kode 12.7: MenggunakanTab.vb
' Menggunakan TabControl untuk menampilkan berbagai pengaturan.

Imports System.Windows.Forms

Public Class FrmTab
    Inherits Form

    ' label untuk merefleksikan perubahan teks
    Friend WithEvents lblTampil As Label

    ' kontrol tab yang memuat tbpWarna,
    ' tbpUkuran, tbpPesan dan tbpTentang
    Friend WithEvents tbcOpsiTeks As TabControl

    ' TabPage memuat opsi warna
    Friend WithEvents tbpWarna As TabPage
    Friend WithEvents radHitam As RadioButton
    Friend WithEvents radMerah As RadioButton
    Friend WithEvents radHijau As RadioButton

    ' TabPage yang opsi ukuran font
    Friend WithEvents tbpUkuran As TabPage
    Friend WithEvents radUkuran12 As RadioButton
    Friend WithEvents radUkuran16 As RadioButton
    Friend WithEvents radUkuran20 As RadioButton

    ' TabPage yang memuat opsi teks
    Friend WithEvents tbpPesan As TabPage
    Friend WithEvents radHallo As RadioButton
    Friend WithEvents radSlmtJalan As RadioButton

    ' TabPage yang memuat pesan
    Friend WithEvents tbpTentang As TabPage
    Friend WithEvents lblPesan As Label

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' event handler untuk tombol radio hitam
    Private Sub radHitam_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radHitam.CheckedChanged

        lblTampil.ForeColor = Color.Black
    End Sub  ' radHitam_CheckedChanged

    ' event handler untuk tombol radio merah
    Private Sub radMerah_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radMerah.CheckedChanged

        lblTampil.ForeColor = Color.Red
    End Sub  ' radMerah_CheckedChanged

    ' event handler untuk tombol radio hijau
    Private Sub radHijau_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radHijau.CheckedChanged

        lblTampil.ForeColor = Color.Green
    End Sub  ' radHijau_CheckedChanged

    ' event handler untuk tombol radio 12 point
    Private Sub radUkuran12_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radUkuran12.CheckedChanged

        lblTampil.Font = New Font(lblTampil.Font.Name, 12)
    End Sub  ' radUkuran12_CheckedChanged

    ' event handler untuk tombol radio 16 point
    Private Sub radUkuran16_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radUkuran16.CheckedChanged

        lblTampil.Font = New Font(lblTampil.Font.Name, 16)
    End Sub  ' radUkuran16_CheckedChanged

    ' event handler untuk tombol radio 20 point
    Private Sub radUkuran20_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radUkuran20.CheckedChanged

        lblTampil.Font = New Font(lblTampil.Font.Name, 20)
    End Sub  ' radUkuran20_CheckedChanged

    ' event handler untuk tombol radio pesan "Hallo"
    Private Sub radHallo_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radHallo.CheckedChanged

        lblTampil.Text = "Hallo!"
    End Sub  ' radHallo_CheckedChanged

    ' event handler untuk tombol radio pesan "Selamat Jalan"
    Private Sub radSlmtJalan_CheckedChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles radSlmtJalan.CheckedChanged

        lblTampil.Text = "Selamat Jalan"
    End Sub  ' radSlmtJalan_CheckedChanged

End Class  ' FrmTab


Gambar 12.15 Keluaran program pada kode 12.7 (bagian 1)


Gambar 12.15 Keluaran program pada kode 12.7 (bagian 2)


Latihan
1.       Tulislah sebuah program yang menampilkan nama-nama propinsip pada sebuah ComboBox. Ketika sebuah item diseleksi dari ComboBox, hal itu akan membuat item tersebut terhapus.
2.       Modifikasi pekerjaan Anda pada No. 1 dengan menambahkan sebuah ListBox. Ketika pengguna menyeleksi sebuah item dari ComboBox, maka hal itu akan membuat item tersebut terhapus dari ComboBox dan menambahkan item itu pada ListBox. Program Anda harus memastikan bahwa ComboBox memuat sedikitnya satu item. Jika tidak, tampilkan sebuah pesan, menggunakan kotak pesan, dan hentikan eksekusi program.
3.       Tulislah sebuah program agar pengguna memasukkan beberapa String pada sebuah TextBox. Setiap String yang dimasukkan ditambahkan ke sebuah ListBox. Pada saat setiap String ditambahkan ke ListBox, pastikan bahwa semua String terurut secara alfabetikal.















No comments:

Post a Comment