Saturday, December 24, 2016

Bab 11. Visual Basic .NET Belajar Dari Contoh



11. GUI







Pengantar

GUI (graphical user interface) memampukan pengguna untuk berinteraksi secara visual dengan sebuah program. GUI juga memberikan tampilan yang semarak dan indah. GUI juga membuat pengguna tidak perlu mengingat sederet kunci (keystroke) dalam menjalankan aplikasi.

GUI dibangun dari komponen-komponen GUI (yang kadangkala dikenal dengan kontrol atau widget). Komponen GUI adalah sebuah objek yang bisa berinteraksi dengan pengguna melalui mouse atau keyboard. Beberapa komponen GUI yang umum dijumpai dicantumkan pada Gambar 11.1.

Komponen
Deskripsi
Label


TextBox


Button

CheckBox

ComboBox



ListBox



Panel

ScrollBar

Sebuah area, yang di dalamnya ikon atau teks (yang tak bisa diedit) ditampilkan.

Sebuah area, yang di dalamnya pengguna memasukkan data dari keyboard. Area ini juga dapat menampilkan informasi.

Sebuah area, yang memicu sebuah event ketika diklik.

Sebuah komponen, yang bisa diseleksi atau dibiarkan tanpa diseleksi.

Sebuah daftar item, dimana pengguna dapat memilih dengan mengklik sebuah item di dalam daftar atau dengan mengetikkan di dalam sebuah kotak.

Sebuah area, yang menampilkan daftar item. Pengguna dapat membuat pilihan dari daftar dengan mengklik item. Beberapa elemen dapat diseleksi sekaligus.

Sebuah kontainer, yang di dalamnya komponen-komponen ditempatkan.

Sebuah komponen, yang memampukan pengguna untuk mengakses berbagai elemen yang tidak dapat dimuat oleh kontainer kontrol.

Gambar 11.1 Beberapa komponen dasar GUI


Windows Form
Windows Form (juga dikenal dengan WinForm) digunakan untuk menciptakan GUI untuk program. Sebuah form adalah elemen grafikal yang muncul pada desktop; ia dapat berupa dialog, jendela, atau jendela MDI (multiple document interface window). Komponen adalah sebuah instans dari suatu kelas yang mengimplementasikan antarmuka IComponent, yang mendefinisikan watak yang harus diimplementasikan komponen. Kontrol, seperti tombol atau label, adalah sebuah komponen yang memiliki representasi grafikal saat dijalankan.

Gambar 11.3 menampilkan semua komponen dan kontrol Windows Forms yang dimuat di dalam Toolbox. Screenshot pertama menampilkan semua kontrol, dan screenshot terakhir menampilkan semua komponen. Untuk menambahkan sebuah komponen atau kontrol pada Windows Form, pengguna dapat menyeleksi komponen atau kontrol dari Toolbox dan menggeretnya ke Windows Form. Perhatikan bahwa Pointer (ikon di atas daftar) bukanlah sebuah komponen; ia memampukan programer untuk menggunakan pointer mouse.


Gambar 11.2 Semua komponen dan kontrol pada Windows Form


Pada serangkaian jendela, jendela aktif adalah jendela terdepan dan memiliki batang judul (title bar) diterangi. Sebuah jendela menjadi jendela aktif ketika pengguna mengklik di manapun di dalam jendela tersebut. Selama interaksi dengan jendela, jendela aktif dikatakan memiliki fokus (focus).

Form berperan sebagai kontainer untuk memuat komponen dan kontrol. Seperti yang terlihat pada Bab 3, ketika Anda menggeret sebuah kontrol dari Toolbox ke form, Visual Basic Studio .NET membangkitkan kode untuk Anda, menginstansiasi komponen, dan menetapkan properti dasarnya. Meskipun Anda sendiri dapat menuliskan kode tersebut, akan jauh lebih mudah dalam menciptakan dan memodifikasi kontrol menggunakan jendela Toolbox dan Properties dan membiarkan Visual Studio .NET menanganinya.

Ketika pengguna berinteraksi dengan sebuah kontrol via mouse atau keyboard, event akan dibangkitkan. Secara umum, event adalah pesan yang dikirim oleh sebuah program untuk memberitahu pada objek atau sekumpulan objek bahwa sebuah aksi telah terjadi. Sebagai contoh, penekanan tombol OK pada MessageBox akan menghasilkan sebuah event. MessageBox menangani event ini. Komponen MessageBox didesain untuk menutup ketika event ditangani, yang terjadi ketika tombol OK diklik.

Setiap kelas yang disajikan pada bab ini (form, komponen, dan kontrol) berada di dalam namespace System.Windows.Forms. Kelas Form, jendela dasar yang digunakan oleh aplikasi Windows, sebenarnya adalah System.Windows.Forms.Form. Sama halnya, kelas Button sebenarnya adalah System.Windows.Forms.Button.
Gambar 11.3 mencantumkan beberapa properti, metode, dan event pada kelas Form.

Properti dan Event Form
Deskripsi /Argumen Delegate dan Event
Properti
AcceptButton

AutoScroll


CancelButton

FormBorderStyle

Font


Text
-------------------------
Metode
Close


Hide


Show
-------------------------
Event
Load

Tombol yang terklik ketika kunci Enter ditekan.

Nilai Boolean yang membolehkan atau tak membolehkan scrollbar tampak (terlihat) ketika dibutuhkan.

Tombol yang terklik ketika kunci Escape ditekan.

Gaya batas (border style) dari form (yaitu, none, single, 3D, sizable).

Font dari teks yang tertampil pada form, dan font default dari kontrol ditambahkan pada form.

Teks di dalam batang judul (title bar) pada form.
----------------------------------------------------------------------------------------------

Menutup sebuah form dan melepaskan semua sumberdaya. Form yang sudah ditutup tidak bisa dibuka kembali.

Menyembunyikan form (tidak menghancurkan form atau melepaskan sumberdayanya).

Menampilkan form yang tersembunyi.
----------------------------------------------------------------------------------------------

Terjadi sebelum sebuah form ditampilkan pada pengguna. Handler untuk event ini ditampilkan di dalam editor ketika form diklik-ganda pada Visual Studio .NET designer.

Gambar 11.3 Beberapa properti, metode, dan event pada kelas Form.


Model Penanganan-Event
GUI dipicu oleh event (event driven), yang menghasilkan event ketika pengguna program berinteraksi dengan GUI. Interaksi yang umum terjadi mencakup menggerakkan mouse, mengklik mouse, mengklik tombol, mengetik di dalam kotak-teks, menyeleksi sebuah item dari menu, dan menutup jendela. Informasi event dilewatkan kepada event handler, yang merupakan metode yang dipanggil akibat terjadinya event. Sebagai contoh, perhatikan sebuah form yang mengubah warna ketika tombol diklik. Pengklikan tombol menghasilkan sebuah event dan melewatkannya kepada event handler untuk tombol tersebut, menyebabkan kode event handler untuk mengubah warna form.

Event didasarkan pada delegate, yang merupakan objek yang mereferensi metode. Delegate event bersifat multicast (kelas MulticastDelegate), yang berarti bahwa ia merepresentasikan sekelompok delegate dengan sidik yang sama. Delegate multicast membuat pemanggila event dikirim secara sekuensial ke semua delegate yang dimuat di dalam delegat multicast. Dalam model penanganan-event, delegate berperan sebagai perantara antara objek pemicu event dan metode event handler (Gambar 11.4).


Gambar 11.4 Model penanganan-event menggunakan delegate

Delegate memampukan kelas menspesifikasi beberapa metode yang tidak diberi nama atau diimplementasikan sampai kelas diinstansiasi. Sebagai contoh, para perancang kelas Form tidak menamai atau mendefenisikan metode yang menangani event Click. Dengan menggunakan delegate, kelas dapat menentukan kapan sebuah event handler akan dipanggil. Para programer yang menciptakan form sendiri kemudian dapat menamai dan mendefinisikan event handler ini.

Begitu event dibangkitkan, sistem memanggil setiap metode (event handler) yang direferensi oleh delegate. Setiap metode di dalam delegate harus memiliki sidik yang sama, karena semua metode tersebut dilewatkan informasi yang sama.

Dimisalkan bahwa sebuah label akan merespon bila diklik. Anda bisa memilih event Click pada menu drop-down, seperti yang ditampilkan pada Gambar 11.5. Potongan kode berikut menciptakan sebuah event handler kosong.

Private Sub lblOutput_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles lblOutput.Click
End Sub

Ini adalah metode yang dipanggil ketika form diklik. Anda bisa memprogram agar form merespon event tersebut dengan menampilkannya sebuah pesan pada MessageBox. Untuk melakukannya, sisipkan statemen

MessageBox.Show("Label diklik.")

ke dalam event handler. Event handler sekarang memuat berikut:

Private Sub lblOutput_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles lblOutput.Click

    MessageBox.Show("Label diklik.")
End Sub


Gambar 11.5 Pemilihan nama metode (event handler)


Anda dapat mengkompilasi dan mengeksekusi program pada kode 11.1. Kapanpun label diklik, sebuah kotak pesan akan menampilkan teks “Label diklik”.

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
' Kode 11.1: ContohEventSederhana.vb
' Program mendemonstrasikan event handler sederhana.

Public Class FrmSederhana
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()


        ' Add any initialization after the
        ' InitializeComponent() call
    End Sub

    ' Form overrides dispose to clean up the component list.
    Protected Overrides Sub Dispose( _
        ByVal disposing As Boolean)

        If disposing Then

            If Not (components Is Nothing) Then
                components.Dispose()
            End If

        End If

        MyBase.Dispose(disposing)
    End Sub

    Friend WithEvents lblOutput As System.Windows.Forms.Label

    ' Required by the Windows Form Designer
    Private components As System.ComponentModel.Container

    ' NOTE: The following procedure is required by
    ' the Windows Form Designer.
    ' It can be modified using the Windows Form Designer.
    ' Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.lblOutput = New System.Windows.Forms.Label()
        Me.SuspendLayout()
        '
        'lblOutput
        '
        Me.lblOutput.Location = New System.Drawing.Point(32, 48)
        Me.lblOutput.Name = "lblOutput"
        Me.lblOutput.Size = New System.Drawing.Size(168, 40)
        Me.lblOutput.TabIndex = 0
        Me.lblOutput.Text = "KLIK SAYA!"
        '
        'FrmSederhana
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(272, 237)
        Me.Controls.AddRange( _
        New System.Windows.Forms.Control() {Me.lblOutput})

        Me.Name = "FrmSederhana"
        Me.Text = "ContohEventSederhana"
        Me.ResumeLayout(False)
    End Sub

#End Region

    ' handler untuk click event pada lblOutput
    Private Sub lblOutput_Click(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles lblOutput.Click

        MessageBox.Show("Label diklik")
    End Sub ' lblOutput_Click

 End Class ' FrmSimpleExample

Gambar 11.6 Keluaran program pada kode 11.1


IDE pada Visual Studio .NET membangkitkan kode yang diapit oleh direktif preprosesor #Region dan #End Region (baris 7-69). Kode yang perlu Anda tuliskan adalah kode penanganan event pada baris 75.


Label, TextBox, dan Button
Label dipakai untuk menyediakan instruksi atau informasi dan didefinisikan dengan kelas Label, yang diderivasi dari kelas Control. Sebuah Label menampilkan teks read-only (teks yang tidak bisa dimodifikasi pengguna). Pada saat program dijalankan, teks Label dapat diubah dengan mengatur properti Text pada Label. Gambar 11.6 mencantumkan beberapa properti Label.

Kotak teks (kelas TextBox) adalah sebuah area dimana teks dapat ditampilkan oleh program atau dimasukkan oleh pengguna via keyboard. Kotak teks password adalah sebuah TextBox yang menyembunyikan informasi yang dimasukkan oleh pengguna. Ketika pengguna mengetikkan karakter demi karakter, kotak teks password hanya menampilkan karakter-karakter *. Ketika sebuah nilai diberikan untuk properti PasswordChar, kotak teks menjadi kotak teks password. Sebaliknya, ia hanya menjadi kotak teks biasa.

Properti Label
Deskripsi
Font

Text

TextAlign


Font yang dipakai oleh teks pada Label.

Teks yang muncul pada Label.

Penyejajaran teks Label. Ada tiga pilihan posisi horisontal (left, center, atau right) dan tiga pilihan posisi vertikal (top, middle, atau bottom).

Gambar 11.7 Beberapa properti Label


Pengguna seringkali menjumpai dua jenis kotak teks, ketika ingin masuk ke komputer atau ke Website tertentu. Kotak teks nama-pengguna membiarkan pengguna memasukkan nama; kotak teks password membiarkan pengguna memasukkan password. Gambar 11.8 mencantumkan beberapa properti dan event pada TextBox.

Tombol adalah sebuah kontrol yang dipakai pengguna untuk memicu aksi tertentu. Program dapat memakai beberapa jenis tombol, seperti checkboxes dan radio buttons. Semua jenis tombol diderivasi dari ButtonBase (namespace System.Windows.Forms), yang mendefinisikan semua fitur tombol. Sekarang, hanya akan didiskusikan mengenai kelas Button, sedangkan jenis tombol lain akan diberikan belakangan. Teks pada sebuah Button disebut dengan label tombol (label button). Gambar 11.9 mencantumkan beberapa properti dan event pada Button.

Properti dan Event TextBox
Deskripsi
Properti
AcceptsReturn



Multiline


PasswordChar




ReadOnly


ScrollBars


Text
-------------------------
Event
TextChanged

Jika True, penekanan Enter menciptakan sebuah baris-baru (jika kotak teks dikonfigurasi menjadi multiline). Jika False, penekanan Enter akan mengklik tombol default.

Jika True, TextBox akan menyediakan baris jamak. Nilai default adalah False.

Jika sebuah karakter disediakan untuk properti ini, TextBox akan menjadi kotak teks password, dan karakter yang dispesifikasi mengaburkan setiap karakter yang diketikkan pengguna. Jika tidak ada karakter yang dispesifikasi, TextBox menampilkan teks yang diketikkan.

Jika True, TextBox memiliki warna latar keabuan, dan teksnya tidak dapat diedit. Nilai default adalah False.

Untuk kotak teks baris jamak (multiline), mengindikasikan kemunculan batang-geser (none, horizontal, vertical, atau both).

Isi teks pada TextBox.
----------------------------------------------------------------------------------------------

Dibangkitkan ketika teks berubah pada TextBox (yaitu, ketika pengguna menambah atau menghapus karakter). Ketik programer mengklik-ganda kontrol TexBox pada Design, sebuah event handler kosong untuk event ini akan dibangkitkan.

Gambar 11.8 Beberapa properti dan event pada TextBox


Properti dan Event Button
Deskripsi
Properti
Text
-------------------------
Event
Click

Teks yang ditampilkan pada muka Button.
----------------------------------------------------------------------------------------------

Dibangkitkan ketika pengguna mengklik kontrol. Ketika programer mengklik-ganda kontrol Button pada design view, sebuah event handler kosong untuk event ini akan diciptakan.

Gambar 11.9 Beberapa properti dan event pada Button


Program pada kode 11.2 menggunakan sebuah TextBox, sebuah Button, dan sebuah Label. Pengguna memasukkan teks pada kotak teks password dan mengklik Button, menyebabkan teks yang dimasukkan ditampilkan pada Label. Kode 11.2 mendemonstrasikan bahwa teks yang dimasukkan ke dalam kotak teks password tidak dipengaruhi oleh nilai PasswordChar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
' Kode 11.2: UjiLabelTextBoxButton.vb
' menggunakan sebuah TextBox, Label, dan Button untuk menampilkan
' teks tersembunyi pada kotak teks password.

Imports System.Windows.Forms

Public Class FrmUjiTombol
    Inherits Form

    Friend WithEvents txtMasukan As TextBox ' bidang masukan
    Friend WithEvents lblKeluaran As Label ' label untuk menampilkan
    Friend WithEvents cmdTampil As Button ' tombol aktivasi

    ' kode yang dibangkitkan oleh Visual Studio .NET

   
    Private Sub cmdTampil_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdTampil.Click

        lblKeluaran.Text = txtMasukan.Text
    End Sub  ' cmdTampil_Click

End Class  ' FrmUjiTombol


Gambar 11.10 Keluaran program pada kode 11.2


Anda kemudian menetapkan properti Text pada cmdTampil menjadi “Tampilkan Saya” dan menghapus properti Text pada lblKeluaran dan textMasukan sehingga keduanya kosong pada saat program dijalankan. Properti BorberStyle pada lblKeluaran diatur menjadi Fixed3D, sehingga memberikan tampilkan tiga dimensi. Perhatikan bahwa properti BorderStyle untuk semua TextBox ditetapkan Fixed3D secara default. Karakter password ditetapkan menjadi karakter asterisk pada properti PasswordChar. Properti ini hanya bisa menerima satu karakter.

Anda menciptakan event handler untuk cmdTampil dengan mengklik-ganda tombol Tampilkan Saya. Ini akan membangkitkan sebuah event handler kosong. Anda kemudian menambahkan kode event handler pada baris 20. Ketika pengguna mengklik tombol Tampilkan Saya, baris 20 akan mendapatkan teks masukan pengguna pada txtMasukan dan menampilkannya pada lblKeluaran.


GroupBox dan Panel
GroupBox dan Panel menata beberapa kontrol pada GUI. Sebagai contoh, beberapa tombol dengan fungsionalitas yang sama dapat ditempatkan di dalam sebuah GroupBox atau Panel di dalam Form Designer pada Visual Studio .NET. Semua tombol tersebut serempak bergeser ketika GroupBox atau Panel digeser. Perbedaan utama antara kelas tersebut adalah bahwa GroupBox dapat menampilkan sebuah kapsion (atau teks) dan tidak memiliki batang geser, sedangkan Panel dapat memiliki batang geser dan tidak memiliki kapsion.

Untuk menciptakan sebuah GroupBox, Anda bisa menggeretnya dari toolbar dan menempatkannya pada sebuah form. Kemudian, Anda bisa menciptakan beberapa kontrol dan menempatkannya di dalam GroupBox. Semua kontrol tersebut ditambahkan pada properti Controls pada GroupBox dan menjadi bagian dari kelas GroupBox. Properti Text pada GroupBox menentukan kapsionnya. Dua tabel berikut mencantumkan beberapa properti pada GroupBox (Gambar 11.11) dan Panel (Gambar 11.12).

Properti GroupBox
Deskripsi
Controls

Text
Mencantumkan semua kontrol yang dimuat GroupBox.

Menspesifikasi teks yang ditampilkan di sisi atas GroupBox (kapsion).

Gambar 11.11 Beberapa properti GroupBox


Properti GroupBox
Deskripsi
AutoScroll


BorderStyle


Controls
Mengindikasikan apakah batang geser muncul ketika Panel terlalu kecil untuk menampilkan semua kontrol yang dimuatnya. Default adalah False.

Menetapkan tepi Panel (default None; opsi lain adalah Fixed3D dan FixedSingle).

Mencantumkan semua kontrol yang dimuat Panel.

Gambar 11.12 Beberapa properti Panel





Gambar 11.13 Menciptakan GroupBox dan Panel dengan batang geser (scrollbar)


Untuk menciptakan sebuah Panel, Anda bisa menggeretnya ke dalam form, dan menambahkan beberapa kontrol ke dalamnya. Untuk menampilkan batang geser, tetapkan properti AutoScroll pada Panel menjadi True. Jika Panel tidak dapat menampilkan semua kontrol yang dimuatnya, maka batang geser akan muncul dengan sendirinya (Gambar 11.13).

Program pada kode 11.3 menggunakan sebuah GroupBox dan sebuah Panel untuk menata beberapa tombol. Semua tombol tersebut mengubah teks pada sebuah Label.

GroupBox (dinamakan groupBoxUtama, pada baris 10) memiliki dua tombol, cmdHai (dilabel Hai, baris 11) dan cmdBah (dilabel Bah, baris 12). Panel (dinamakan panelUtama, baris 18) juga memiliki dua tombol, cmdKiri (dilabel Ujung Kiri, baris 19) dan cmdKanan (dilabel Ujung Kanan, baris 20). Kontrol panelUtama memiliki properti AutoScroll ditetapkan True, sehingga batang geser akan muncul ketika isi Panel memerlukan ruang yang lebih dari area Panel. Label (dinamakan dengan lblPesan) diinisiasi kosong.

Untuk menambahkan beberapa kontrol pada grouBoxUtama, Visual Studio .NET menciptakan sebuah array Windows.Forms.Control yang memuat semua kontrol tersebut, yang kemudian dilewatkan kepada metode AddRange pada GroupBox. Sama halnya, untuk menambahkan beberapa kontrol pada panelUtama, Visual Studio .NET menciptakan sebuah array Windows.Forms.Control yang memuat semua kontrol tersebut, yang kemudian dilewatkan kepada metode AddRange pada Panel.

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
' Kode 11.3: ContohGroupBoxPanel.vb
' Menggunakan GroupBox dan Panel untuk memuat beberapa tombol.

Imports System.Windows.Forms

Public Class FrmGroupBox
    Inherits Form

    ' GroupBox dan beberapa kontrolnya
    Friend WithEvents groupBoxUtama As GroupBox
    Friend WithEvents cmdHai As Button
    Friend WithEvents cmdBah As Button

    ' menampilkan pesan
    Friend WithEvents lblPesan As Label

    ' Panel dan beberapa kontrolnya
    Private WithEvents panelUtama As Panel
    Friend WithEvents cmdKiri As Button
    Friend WithEvents cmdKanan As Button

    ' kode yang dibangkitkan Visual Studio .NET

    ' beberapa event handler untuk mengubah lblPesan
    Private Sub cmdHai_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdHai.Click

        lblPesan.Text = "Hai ditekan"
    End Sub  ' cmdHai_Click

    ' handler untuk tombol Bah
    Private Sub cmdBah_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdBah.Click

        lblPesan.Text = "Bah ditekan"
    End Sub  ' cmdBah_Click

    ' handler untuk tombol Kiri
    Private Sub cmdKiri_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdKiri.Click

        lblPesan.Text = "Ujung kiri ditekan"
    End Sub  ' cmdKiri_Click

    ' handler untuk tombol Kiri
    Private Sub cmdKanan_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdKanan.Click

        lblPesan.Text = "Ujung kanan ditekan"
    End Sub  ' cmdKanan_Click

End Class  ' FrmGroupBox


Gambar 11.14 Keluaran program pada kode 11.3


CheckBox dan RadioButton
Visual Basic .NET menyediakan dua tombol keadaan, yaitu CheckBox dan RadioButton, yang dapat menjadi keadaan on/off atau true/false. Kelas CheckBox dan RadioButton diderivasi dari kelas ButtonBase. Sebuah RadioButton berbeda dari CheckBox, dimana RadioButton biasanya diorganisir menjadi grup dan bahwa hanya salah satu RadioButton pada grup yang dapat dipilih (True).

Beberapa properti dan event dai kelas CheckBox ditampilkan pada Gambar 11.15. Program pada kode 11.4 mengijinkan pengguna untuk memilih sebuah CheckBox untuk mengubah font pada sebuah Label. Jika kedua CheckBox diseleksi, gaya font adalah tebal dan italik. Ketika awal program dieksekusi, tidak ada satupun CheckBox yang diseleksi.

Properti dan event CheckBox
Deskripsi
Properti
Checked

CheckState



Text
---------------------------
Event
CheckedChanged



CheckStateChanged

Mengindikasikan apakah CheckBox diseleksi atau tidak diseleksi.

Mengindikasikan apakah CheckBox diseleksi atau tidak diseleksi, dengan sebuah enumerasi yang memiliki nilai-nilai Checked, Unchecked, atau Indeterminate

Menspesifikasi teks yang ditampilkan di sisi kanan CheckBox.
----------------------------------------------------------------------------------------------

Dibangkitkan ketika pengguna mengklik-ganda kontrol CheckBox pada design view. Ketika pengguna mengklik-ganda kontrol CheckBox pada design view, sebuah event handler kosong akan dibangkitkan.

Dibangkitkan ketika properti CheckState berubah.

Gambar 11.15 Beberapa properti dan event pada CheckBox


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
' Fig. 11.4: UjiCheckBox.vb
' Menggunakan CheckBox untuk mentoggle gaya font italic dan bold.

Imports System.Windows.Forms

Public Class FrmCheckBox
    Inherits Form

    ' label untuk menampilkan
    Friend WithEvents lblKeluaran As Label

    ' checkbox untuk font
    Friend WithEvents chkTebal As CheckBox
    Friend WithEvents chkMiring As CheckBox

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menggunakan Xor untuk mentoggle italic
    Private Sub chkMiring_CheckedChanged _
        (ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles chkMiring.CheckedChanged

        lblKeluaran.Font = New Font(lblKeluaran.Font.Name, _
            lblKeluaran.Font.Size, lblKeluaran.Font.Style _
            Xor FontStyle.Italic)
    End Sub  ' chkMiring_CheckedChanged

    ' menggunakan Xor untuk mentoggle bold
    Private Sub chkTebal_CheckedChanged _
        (ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles chkTebal.CheckedChanged

        lblKeluaran.Font = New Font(lblKeluaran.Font.Name, _
            lblKeluaran.Font.Size, lblKeluaran.Font.Style _
            Xor FontStyle.Bold)
    End Sub  ' chkTebal_CheckedChanged

End Class  'FrmCheckBox

Gambar 11.16 Keluaran program pada kode 11.4


CheckBox pertama, dinamai chkTebal (baris 13), memiliki properti Text yang ditetapkan Bold. CheckBox yang lain dinamai chkMiring (baris 14) dan dilabel Miring. Properti Text pada Label, dinamai lblKeluaran, ditetapkan menjadi Amati Perubahan Font ini.

Setelah menciptakan beberapa kontrol yang diperlukan, Anda perlu mendefinisikan event handlernya. Dengan mengklik-ganda CheckBox bernama chkTebal akan menciptakan event handler kosong  CheckedChanged (baris 29). Untuk memahami kode yang ditambahkan pada event handler ini, pertama-tama perlu didiskusikan tentang properti Font pada lblKeluaran.

Agar font dapat diubah, programer harus menetapkan properti Font menjadi sebuah objek Font. Konstruktor Font (baris 23-25 dan 33-35) mengambil nama, ukuran, dan gaya font sebagai argumen. Dua argumen pertama adalah lblKeluaran.Font.Name dan lblKeluaran.Font.Size (baris 34). Gaya font adalah anggota enumerasi FontStyle, yang memuat gaya Regular, Bold, Italic, Strikeout, dan Underline.

Gaya font dapat dikombinasikan menggunakan operator bitwise. Dokumentasi FCK mengindikasikan bahwa FontStyle adalah sebuah System.FlagAttribute, yang berarti bahwa nilai-nilai bit FontStyle dikombinasikan menggunakan operator bitwise (pada kasus ini, menggunakan operator Xor).

Tombol radio (didefinisikan dengan kelas RadioButton) sama dengan CheckBox, yang selalu memiliki dua keadaan. Namun, tombol radio normalnya selalu berada dalam sebuah grup, dimana hanya satu tombol radio yang dapat diseleksi pada grup tersebut. Penyeleksian salah satu tombol radio akan menyebabkan semua tombol radio yang lain di dalam grup menjadi tidak terseleksi. Untuk mengelompokkan beberapa tombol radio menjadi beberapa grup, Anda bisa menggunakan GroupBox atau Panel. Beberapa properti dan event kelas RadioButton dicantumkan pada Gambar 11.17.

Properti dan event RadioButton
Deskripsi
Properti
Checked

Text
---------------------------
Event
Click

CheckedChanged



Mengindikasikan apakah RadioButton diseleksi atau tidak diseleksi.

Menspesifikasi teks yang ditampilkan di sisi kanan RadioButton.
----------------------------------------------------------------------------------------------

Dibangkitkan ketika pengguna mengklik kontrol.

Dibangkitkan ketika pengguna mengklik-ganda kontrol RadioButton pada design view. Ketika pengguna mengklik-ganda kontrol RadioButton pada design view, sebuah event handler kosong akan dibangkitkan.

Gambar 11.17 Beberapa properti dan event pada kelas RadioButton



Program pada kode 11.5 menggunakan beberapa tombol radio untuk menyeleksi beberapa opsi pada sebuah MessageBox. Setelah menyeleksi atribut yang diinginkan, pengguna akan menekan tombol Tampil, menyebabkan MessageBox muncul. Sebuah label di pojok kiri menampilkan hasil MessageBox (Yes, No, Cancel, dan lainnya).

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
' Kode 11.5: UjiRadioButton.vb
' Menggunakan RadioButton untuk memberikan opsi jendela pesan.

Imports System.Windows.Forms

Public Class FrmRadioButton
    Inherits Form

    Private tipeIkon As MessageBoxIcon
    Private tipeTombol As MessageBoxButtons

    ' group box untuk tombol dan kontrolnya
    Friend WithEvents tipeTombolGroupBox As GroupBox
    Friend WithEvents radOk As RadioButton
    Friend WithEvents radOkCancel As RadioButton
    Friend WithEvents radAbortRetryIgnore As RadioButton
    Friend WithEvents radYesNoCancel As RadioButton
    Friend WithEvents radYesNo As RadioButton
    Friend WithEvents radRetryCancel As RadioButton

    ' group box untuk ikon dan kontrolnya
    Friend WithEvents ikonGroupBox As GroupBox
    Friend WithEvents radAsterisk As RadioButton
    Friend WithEvents radError As RadioButton
    Friend WithEvents radExclamation As RadioButton
    Friend WithEvents radHand As RadioButton
    Friend WithEvents radInformation As RadioButton
    Friend WithEvents radQuestion As RadioButton
    Friend WithEvents radStop As RadioButton
    Friend WithEvents radWarning As RadioButton

    ' menampilkan tombol
    Friend WithEvents cmdTampil As Button

    ' label untuk menampilkan
    Friend WithEvents lblTampil As Label

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menampilkan kotak pesan dan tombol dialog yang diklik
    Private Sub cmdTampil_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles cmdTampil.Click

        Dim dialog As DialogResult = MessageBox.Show( _
            "Ini adalah MessageBox Anda", "MessageBox Anda", _
            tipeTombol, tipeIkon)

        ' memeriksa hasil dialog dan menampilkannya pada label
        Select Case dialog

            Case DialogResult.OK
                lblTampil.Text = "OK ditekan"

            Case DialogResult.Cancel
                lblTampil.Text = "Cancel ditekan"

            Case DialogResult.Abort
                lblTampil.Text = "Abort ditekan"

            Case DialogResult.Retry
                lblTampil.Text = "Retry ditekan"

            Case DialogResult.Ignore
                lblTampil.Text = "Ignore ditekan"

            Case DialogResult.Yes
                lblTampil.Text = "Yes ditekan"

            Case DialogResult.No
                lblTampil.Text = "No ditekan"
        End Select

    End Sub  ' cmdTampil_Click

    ' menetapkan tipe tombol menjadi OK
    Private Sub radOk_CheckedChanged(ByVal sender _
        As System.Object, ByVal e As System.EventArgs) _
        Handles radOk.CheckedChanged

        tipeTombol = MessageBoxButtons.OK
    End Sub  ' radOk_CheckedChanged

    ' menetapkan tipe tombol menjadi OkCancel
    Private Sub radOkCancel_CheckedChanged(ByVal sender _
        As System.Object, ByVal e As System.EventArgs) _
        Handles radOkCancel.CheckedChanged

        tipeTombol = MessageBoxButtons.OKCancel
    End Sub  ' radOkCancel_CheckedChanged

    ' menetapkan tipe tombol menjadi AbortRetryIgnore
    Private Sub radAbortRetryIgnore_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radAbortRetryIgnore.CheckedChanged

        tipeTombol = MessageBoxButtons.AbortRetryIgnore
    End Sub  ' radAbortRetryIgnore_CheckedChanged

    ' menetapkan tipe tombol menjadi YesNoCancel
    Private Sub radYesNoCancel_CheckedChanged(ByVal sender _
        As System.Object, ByVal e As System.EventArgs) _
        Handles radYesNoCancel.CheckedChanged

        tipeTombol = MessageBoxButtons.YesNoCancel
    End Sub  ' radYesNoCancel_CheckedChanged

    ' menetapkan tipe tombol menjadi YesNo
    Private Sub radYesNo_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radYesNo.CheckedChanged

        tipeTombol = MessageBoxButtons.YesNo
    End Sub  ' radYesNo_CheckedChanged

    ' menetapkan tipe tombol menjadi RetryCancel
    Private Sub radRetryCancel_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radRetryCancel.CheckedChanged

        tipeTombol = MessageBoxButtons.RetryCancel
    End Sub  ' radRetryCancel_CheckedChanged

    ' menetapkan tipe ikon menjadi Asterisk ketika Asterisk diseleksi
    Private Sub radAsterisk_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radAsterisk.CheckedChanged

        tipeIkon = MessageBoxIcon.Asterisk
    End Sub  ' radAsterisk_CheckedChanged

    ' menetapkan tipe ikon menjadi Error ketika Error diseleksi
    Private Sub radError_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radError.CheckedChanged

        tipeIkon = MessageBoxIcon.Error
    End Sub  ' radError_CheckedChanged

    ' menetapkan tipe ikon menjadi Exclamation ketika Exclamation diseleksi
    Private Sub radExclamation_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radExclamation.CheckedChanged

        tipeIkon = MessageBoxIcon.Exclamation
    End Sub  ' radExclamation_CheckedChanged

    ' menetapkan tipe ikon menjadi Hand ketika Hand diseleksi
    Private Sub radHand_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radHand.CheckedChanged

        tipeIkon = MessageBoxIcon.Hand
    End Sub  ' radHand_CheckedChanged

    ' menetapkan tipe ikon menjadi Information ketika Information diseleksi
    Private Sub radInformation_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radInformation.CheckedChanged

        tipeIkon = MessageBoxIcon.Information
    End Sub  ' radInformation_CheckedChanged

    ' menetapkan tipe ikon menjadi Question ketika Question diseleksi
    Private Sub radQuestion_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radQuestion.CheckedChanged

        tipeIkon = MessageBoxIcon.Question
    End Sub  ' radQuestion_CheckedChanged

    ' menetapkan tipe ikon menjadi Stop ketika Stop diseleksi
    Private Sub radStop_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radStop.CheckedChanged

        tipeIkon = MessageBoxIcon.Stop
    End Sub  ' radStop_CheckedChanged

    ' menetapkan tipe ikon menjadi Warning ketika Warning diseleksi
    Private Sub radWarning_CheckedChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) _
        Handles radWarning.CheckedChanged

        tipeIkon = MessageBoxIcon.Warning
    End Sub  ' radWarning_CheckedChanged

End Class  ' FrmRadioButton



Gambar 11.18 Keluaran program pada kode 11.5


PictureBox
Sebuah kotak gambar (kelas PictureBox) dipakai untuk menampilkan citra. Citra, yang ditetapkan oleh objek kelas Image, dapat berupa format bmp, GIF (Graphics Interchange Format), atau JPEG (Joint Photographic Expert Group).

Properti Image menspesifikasi citra yang akan ditampilkan, dan properti SizeMode mengindikasikan bahwa citra ditampilkan dengan gaya Normal, StretchImage, Autosize, atau CenterImage. Gambar 11.19 mendeskripsikan beberapa properti dan event pada kelas PictureBox.

Program pada kode 11.6 menggunakan gbrImage untuk menampilkan salah satu dari citra, yaitu citra0, citra1, atau citra2. Ketiga citra ini berada di dalam direktori citra (pada bin/citra dari projek Anda). Kapan pun penguna mengklik gbrCitra, citra akan berubah. Label (dinamai lblPrompt) pada pojok atas form menampilkan teks Klik Pada Kotak Gambar Untuk Menampilkan Gambar.

Properti dan event PictureBox
Deskripsi
Properti
Image

SizeMode





---------------------------
Event
Click

Menetapkan citra yang akan ditampilkan pada PictureBox.

Enumerasi yang mengontrol posisi dan ukuran citra. Nilainya adalah Normal (default), StretchImage, AutoSize, dan CenterImage. Nilai Normal memposisikan citra di pojok kiri-atas PictureBox, dan CenterImage menempatkan citra di tengah. Nilai StretchImage mengubah ukuran citra agar sesuai dengan PictureBox. Nilai AutoSize mengubah ukuran PictureBox agar cukup untuk menampung citra.
----------------------------------------------------------------------------------------------

Dibangkitkan ketika pengguna mengklik kontrol.

Gambar 11.19 Beberapa properti dan event pada kelas PictureBox


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
' Kode 11.6: UjiPictureBox.vb
' Menggunakan sebuah PictureBox untuk menampilkan citra.

Imports System.IO
Imports System.Windows.Forms

Public Class FrmPictureBox
    Inherits Form

    Private nomorCitra As Integer = -1

    ' instruksi pada label
    Friend WithEvents lblPrompt As Label

    ' arae untuk menampilkan citra
    Friend WithEvents gbrImage As PictureBox

    ' Visual Studio .NET generated code

    ' mengganti citra pada gbrImage
    Private Sub gbrImage_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles gbrImage.Click

        ' nomorCitra dari 0 to 2
        nomorCitra = (nomorCitra + 1) Mod 3

        ' menciptakan objek Image dari file, menampilkannya pada PictureBox
        gbrImage.Image = Image.FromFile _
            (Directory.GetCurrentDirectory & "\citra\citra" & _
            nomorCitra & ".bmp")
    End Sub  ' gbrImage_Click

End Class  ' FrmPictureBox


Gambar 11.20 Keluaran program pada kode 11.6


Penanganan Mouse-Event
Bagian ini akan menjelaskan penanganan mouse event, seperti, mengklik, menekan, dan menggerak-kan. Mouse event dapat ditangani untuk semua kontrol yang diderivasi dari System.Win-dows.Forms.Control. Informasi mouse event dilewatkan melalui kelas MouseEventArgs, dan delegate yang digunakan untuk menciptakan mouse-event handler adalah MouseEventHandler. Setiap metode penanganan mouse-event memerlukan sebuah Object dan sebuah objek MouseEventArgs sebagai argumen. Sebagai contoh, event Click menggunakan delegate EventHandler dan argumen EventArgs.

Kelas MouseEventArgs memuat informasi yang berkaitan dengan mouse event, seperti koordinat x-y dari pointer mouse, tombol mouse (yang ditekan Right, Left atau Middle), dan jumlah berapa kali mouse diklik. Perhatikan bahwa koordinat x-y dari objek MouseEventArgs relatif terhadap kontrol yang dibangkitkan event. Titik (0, 0) merepresentasikan pojok kiri-atas kontrol. Beberapa mouse event dideskripsikan pada Gambar 11.21.

Mouse Event, Delegate, dan Event Argument
Mouse Event
MouseEnter

MouseLeave

MouseDown


MouseHover

MouseMove


MouseUp

---------------------------
Properti
Button

Clicks

X

Y

Dibangkitkan jika kursor mouse memasuki area kontrol.

Dibangkitkan jika kursor mouse meninggalkan area kontrol.

Dibangkitkan jika tombol mouse ditekan ketika kursornya di atas area kontrol.

Dibangkitkan ketika kursor mouse berada di atas area kontrol.

Dibangkitkan jika kursor mouse digerakkan ketika berada di dalam area kontrol.

Dibangkitkan jika tombol mouse dilepaskan ketika kursor berada di atas area kontrol.
----------------------------------------------------------------------------------------------

Menspesifikasi tombol mouse yang ditekan (left, right, middle, atau none).

Mengindikasikan jumlah berapa kali tombol mouse diklik.
                                                                 
Koordinat-x dari event, di dalam kontrol.

Koordinat-y dari event, di dalam kontrol.

Gambar 11.21 Mouse Event, Delegate, dan Event Argument


Program pada kode 11.7 menggunakan mouse event untuk menggambar pada sebuah form. Kapanpun pengguna menggeret mouse, sebuah garis akan tergambar pada form.

Pada baris 7, program mendeklarasikan variabel harusGambar, yang menentukan apakah harus menggambar pada form. Dinginkan bahwa program hanya akan menggambar ketika tombol mouse ditekan. Jadi, di dalam event handler untuk event FrmPainter_MouseDown (baris 28-33), harusGambar ditetapkan True. Sesaat setelah tombol mouse dilepas, program akan berhenti menggambar; harusGambar ditetapkan False di dalam event handler FrmPainter_MouseUp (baris 36-41).

Kapanpun mouse bergerak, sistem membangkitkan sebuah event MouseMove pada sebuah laju yang telah didefinisikan oleh sistem operasi. Di dalam event handler FrmPainter_MouseMove (baris 18-23), program akan menggambar hanya jika harusGambar bernilai True (mengindikasikan bahwa tombol mouse ditekan). Baris 19 menciptakan objek Graphics, yang menawarkan beberapa metode untuk menggambar berbagai bangun. Sebagai contoh, metode FillEllipse (baris 21-22) menggambarkan sebuah lingkaran pada tiap titik yang dilalui kursor (ketika kurson ditekan). Parameter pertama untuk metode FillEllipse adalah sebuah objek SolidBrush, yang menspesifikasi warna bangun yang sedang digambar. Sebuah objek SolidBrush baru diciptakan dengan melewatkan nilai Color kepada konstruktor. Tipe Color memuat berbagai konstanta warna terdefinisi, pada kasus ini, dipilih Color.BlueViolet (baris 22). SolidBrush mengisi sebuah region eliptik.

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
' Kode 11.7: Painter.vb
' Menggunakan mouse untuk menggambar pada sebuah form.

Public Class FrmPainter
    Inherits System.Windows.Forms.Form

    Dim harusGambar As Boolean = False

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menggambar jika harusGambar bernilai True
    Private Sub FrmPainter_MouseMove( _
        ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.MouseEventArgs) _
        Handles MyBase.MouseMove

        ' menggambar jika mouse ditekan
        If harusGambar Then
            Dim grafik As Graphics = CreateGraphics()

            grafik.FillEllipse _
                (New SolidBrush(Color.BlueViolet), e.X, e.Y, 4, 4)
        End If

    End Sub ' FrmPainter_MouseMove

    ' menetapkan harusGambar menjadi True
    Private Sub FrmPainter_MouseDown(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.MouseEventArgs) _
        Handles MyBase.MouseDown

        harusGambar = True
    End Sub ' FrmPainter_MouseDown

    ' menetapkan harusGambar menjadi False
    Private Sub FrmPainter_MouseUp(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.MouseEventArgs) _
        Handles MyBase.MouseUp

        harusGambar = False
    End Sub ' FrmPainter_MouseUp

End Class ' FrmPainter


Gambar 11.22 Keluaran program pada kode 11.7


Penanganan Keyboard-Event
Bagian ini akan menjelaskan penanganan key event, yang dibangkitkan ketika kunci pada keyboard ditekan dan dilepaskan. Event semacam itu dapat ditangani oleh sembarang kontrol yang mewarisi System.Windows.Forms.Control. Ada dua jenis tipe key event. Pertama adalah event KeyPress, yang terpicu ketika sebuah kunci yang merepresentasikan sebuah karakter ASCII ditekan (ditentukan oleh properti KeyChar). ASCII adalah sebuah himpunan 128-karakter yang terdiri-dari simbol-simbol alfanumerik.

Keyboard Event, Delegate, dan Event Argument
Key Event
KeyDown

KeyUp

KeyPress


Properti
KeyChar

Handled

Alt

Control

Shift

Handled

KeyCode


KeyData


KeyValue



Modifiers

Dibangkitkan ketika kunci awalnya ditekan.

Dibangkitkan ketika kunci dilepaskan.

Dibangkitkan ketika kunci ditekan. Terjadi berulang kali ketika kunci ditahan.


Menghasilkan karakter ASCII untuk kunci yang ditekan.

Mengindikasikan apakah event KeyPress telah ditangani.

Mengindikasikan apakah kunci Alt ditekan.

Mengindikasikan apakah kunci Control ditekan.

Mengindikasikan apakah kunci Shift ditekan.

Mengindikasikan apakah event telah ditangani.

Menghasilkan kode kunci sebagai enumerasi Keys, tidak termasuk informasi modifier key.

Menghasilkan kode kunci, sebagai enumerasi Keys, termasuk informasi modifier key. Memuat semua informasi mengenai kunci-kunci yang ditekan.

Menghasilkan kode kunci sebagai Integer, bukan sebagai enumerasi Keys. Digunakan untuk mendapatkan representasi numerik dari kunci yang ditekan.

Menghasilkan sebuah enumerasi Keys untuk sembarang modifier key yang ditekan (Alt, Control, dan Shift).

Gambar 11.23 Key Event, Delegate, dan Event Argument


Namun event KeyPress tidak memampukan Anda dalam menentukan apakah modifier key ditekan atau tidak (seperti Shift, Alt, dan Control). Adalah hal yang perlu untuk menangani tipe key event yang kedua, event KeyUp atau KeyDown, untuk menentukan aksi semacam itu. Kelas KeyEventArgs memuat informasi tentang modifier key. Nilai enumerasi Key dapat dijadikan nilai balik, yang menyediakan informasi tentang rentang kunci-kunci tak-ASCII. Seringkali, modifier key digunakan bersamaan dengan mouse untuk menyeleksi informasi. KeyEventHandler dan KeyPressEvent-Handler merupakan dua delegate untuk tugas ini. Gambar 11.23 mencantumkan informasi tentang key event.

Kode 11.8 mendemonstrasikan kegunaan key-event handler dalam menampilkan sebuah kunci yang ditekan oleh pengguna. Program adalah sebuah form dengan dua Label. Ia menampilkan kunci yang ditekan pada sebuah Label dan informasi modifier key pada Label yang lain.

Awalnya, dua Label (lblKarakter dan lblInformasi) kosong. Label lblKarakter menampilkan nilai karakter dari kunci yang ditekan, sedangkan lblInformasi menampilkan informasi yang berkaitan dengan kunci yang ditekan. Karena event KeyDown dan KeyPress menyampaikan informasi yang berbeda, FrmDemoKunci menangani keduanya.

Event handler KeyPress (baris 18-23) mengakses properti KeyChar dari objek KeyPressEventArgs. Ini akan menghasilkan kunci yang ditekan sebagai sebuah Char dan menampilkan hasilnya pada lblKarakter (baris 22). Jika kunci yang ditekan bukan sebuah karakter ASCII, maka event KeyPress tidak akan terpicu, dan lblKarakter akan tetap kosong.

Event handler KeyDown (baris 25-56) menampilkan informasi dari objek KeyEventArgs. Ia menguji kunci Alt, Shift, dan Control menggunakan properti Alt, Shift, dan Control, yang masing-masing menghasilkan Boolean, yaitu bernilai True jika kunci terkait ditekan, False jika sebaliknya. Ia kemudian menampilkan properti KeyCode, KeyData, dan KeyValue.

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
' Kode 11.8: DemoKunci.vb
' Menampilkan informasi tentang kunci yang ditekan.

Imports System.Windows.Forms

Public Class FrmDemoKunci
    Inherits Form

    ' KeyPressEventArgs
    Friend WithEvents lblKarakter As Label

    ' KeyEventArgs
    Friend WithEvents lblInformasi As Label

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' event handler untuk penekanan kunci
    Private Sub FrmDemoKunci_KeyPress(ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.KeyPressEventArgs) _
        Handles MyBase.KeyPress

        lblKarakter.Text = "Kunci yang ditekan: " & e.KeyChar
    End Sub

    ' menampilkan modifier key, key code, key data dan key value
    Private Sub FrmDemoKunci_KeyDown(ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.KeyEventArgs) _
        Handles MyBase.KeyDown

        lblInformasi.Text = ""

        ' jika kunci adalah Alt
        If e.Alt Then
            lblInformasi.Text &= "Alt: Ya" & vbCrLf
        Else
            lblInformasi.Text &= "Alt: Tidak" & vbCrLf
        End If

        ' jika kunci adalah Shift
        If e.Shift Then
            lblInformasi.Text &= "Shift: Ya" & vbCrLf
        Else
            lblInformasi.Text &= "Shift: Tidak" & vbCrLf
        End If

        ' jika kunci adalah Ctrl
        If e.Control Then
            lblInformasi.Text &= "Ctrl: Ya" & vbCrLf
        Else
            lblInformasi.Text &= "Ctrl: Tidak" & vbCrLf
        End If

        lblInformasi.Text &= "KeyCode: " & e.KeyCode.ToString & _
        vbCrLf & "KeyData: " & e.KeyData.ToString & _
        vbCrLf & "KeyValue: " & e.KeyValue
    End Sub ' FrmDemoKunci_KeyDown

    ' menghapus label ketika kunci dilepaskan
    Private Sub FrmDemoKunci_KeyUp(ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.KeyEventArgs) _
        Handles MyBase.KeyUp

        lblInformasi.Text = ""
        lblKarakter.Text = ""
    End Sub ' FrmDemoKunci_KeyUp

End Class ' FrmDemoKunci


Gambar 11.24 Keluaran program pada kode 11.8


Properti KeyCode menghasilkan sebuah enumerasi Keys, yang dikonversi menjadi sebuah String melalui metode ToString (baris 35). Properti KeyCode menghasilkan kunci yang ditekan, tetapi tidak menyediakan informasi tentang modifier key. Jadi, kedua huruf besar dan huruf kecil dari “a” akan direpresentasikan sebagai kunci A.

Properti KeyData (baris 54) juga menghasilkan sebuah enumerasi Keys, tetapi properti ini mencakup data tentang modifier key. Jadi, jika kunci “A” tekan, KeyData akan menunjukkan bahwa kunci A dan kunci Shift ditekan. Selanjutnya, KeyValue (baris 47) menghasilkan kode kunci dari kunci yang ditekan sebagai nilai Integer.

Event handler KeyUp (baris 59-65) menghapus kedua label ketika kunci dilepaskan. Seperti yang Anda dapat lihat dari keluaran, kunci-kunci tak-ASCII tidak ditampilkan pada lblKarakter, karena event KeyPress tidak dibangkitkan. Namun, event KeyDown masih tetap dibangkitkan, dan lblInformasi menampilkan informasi tentang kunci. Enumerasi Keys dapat dipakai untuk menguji kunci spesifik dengan membandingkan kunci yang ditekan dengan KeyCode.


Latihan
1.       Ciptakanlah GUI berikut:



2.       Ciptakanlah GUI berikut:







1 comment:

  1. Logika Pemrograman: Bab 11. Visual Basic .Net Belajar Dari Contoh >>>>> Download Now

    >>>>> Download Full

    Logika Pemrograman: Bab 11. Visual Basic .Net Belajar Dari Contoh >>>>> Download LINK

    >>>>> Download Now

    Logika Pemrograman: Bab 11. Visual Basic .Net Belajar Dari Contoh >>>>> Download Full

    >>>>> Download LINK

    ReplyDelete