GUI dengan
Windows Forms
1.1 Pengantar
Sebuah GUI (graphical user interface) memampukan pengguna untuk berinteraksi
secara visual dengan program. GUI memberikan program penampilan (atau LAF, look-and-feel) yang menarik. Penyediaan
komponen-komponen GUI akan memampukan pengguna untuk memprogram lebih cepat.
Sebagai salah satu contoh GUI, perhatikan
pada Gambar 1.1, yang menampilkan sebuah jendela IDE Visual Studio 2012 yang
memuat pelbagai kontrol (kendali) GUI. Di bagian atas jendela terdapat sebuah
batang menu yang memuat menu FILE, EDIT, VIEW, DEBUG, TEAM, SQL, TOOLS, TEST, ARCHITECTURE,
ANALYZE, WINDOW, dan HELP. Di bawah batang menu terdapat sebuah toolbar yang
memuat tombol-tombol, masing-masing dengan tugas tertentu, seperti menciptakan
projek baru atau membuka projek yang sudah ada.
Gambar 1.1 Kendali-kendali GUI pada jendela IDE Visual
Studio 2012
GUI dibangun dari kendali-kendali GUI (yang
kadangkal dikenal dengan komponen atau widget,
singkatan dari window gadget). Setiap
kendali GUI merupakan objek yang dapat menampilkan informasi pada layar atau
yang memampukan pengguna untuk berinterasi dengan sebuah aplikasi melalui mouse, papanketik (keyboard), atau masukan lainnya (seperti voice command). Beberapa kendali GUI dicantumkan pada Gambar 1.2.
Kendali
|
Penjelasan
|
Label
|
Menampilkan citra atau teks yang
tidak bisa diedit.
|
TextBox
|
Memampukan
pengguna untuk memasukkan data melalui papanketik. Ia juga dipakai untuk
menampilkan teks yang dapat diedit maupun yang tak bisa diedit.
|
Button
|
Memicu sebuah event ketika diklik dengan mouse.
|
CheckBox
|
Menetapkan sebuah opsi yang dapat
diseleksi (dicentang) atau dideseleksi.
|
ComboBox
|
Menyediakan
sebuah daftar drop-down yang memuat item-item sehingga
pengguna dapat membuat pilihan dengan mengklik suatu item pada daftar atau
dengan mengetikkannya pada sebuah kotak yang tersedia.
|
ListBox
|
Menyediakan
sebuah daftar item yang dapat dipilih pengguna dengan mengklik satu atau
lebih item.
|
Panel
|
Sebuah kontainer dimana di dalamnya
kendali-kendali dapat ditempatkan dan diorganisir.
|
NumericUpDown
|
Memampukan pengguna untuk memilih
dari suatu rentang yang memuat nilai-nilai masukan numerik.
|
Gambar
1.2 Beberapa kendali GUI
dasar
1.2
Windows Forms
Windows Forms digunakan untuk menciptakan GUI untuk
program. Sebuah Form merupakan suatu
elemen grafikal yang muncul pada desktop komputer Anda; ia dapat berupa jendela
dialog, jendela MDI (multiple document interface
window), dan lainnya. Komponen merupakan sebuah instans dari kelas yang
mengimplementasikan antarmuka IComponent,
yang mendefinisikan watak-watak yang
harus diimplementasikan oleh komponen tersebut. Kendali, seperti sebuah Button atau Label, memiliki representasi grafikal. Beberapa komponen tidak
memiliki representasi grafikal (misalnya, kelas Timer dari namespace System.Windows.Forms). Komponen semacam
itu tidak terlihat pada saat program dijalankan.
Gambar 1.3 menampilkan kendali-kendali dan
komponen-komponen Windows Forms dari
Toolbox C#. Kendali-kendali dan
komponen-komponen tersebut diorganisir ke dalam kategori-kategori secara
fungsionalitas. Pemilihan kategori All
Windows Forms di sisi atas Toolbox
membuat Anda dapat melihat semua kendali dan komponen. Pada bab ini, akan
didiskusikan beberapa kendali dan komponen ini. Untuk menambahkan sebuah
kendali atau komponen ke dalam sebuah Form,
Anda dapat memilih kendali atau komponen tersebut dari Toolbox dan menggeretnya ke Form
tersebut. Untuk mendeseleksi sebuah kendali atau komponen, Anda bisa memilih
item Pointer pada Toolbox (ikon di sisi atas). Ketika
item Pointer dipilih, Anda tidak
bisa lagi menambahkan kendali baru pada Form.
Ketika terdapat beberapa jendela pada layar, jendela aktif merupakan jendela
yang paling depan dan memiliki batang judul tesoroti (highlighted). Sebuah jendela menjadi jendela aktif ketika pengguna
mengklik jendela tersebut. Jendela aktif dikatakan “memiliki fokus”. Sebagai contoh,
pada Visual Studio, jendela aktif adalah jendela Toolbox ketika Anda memilih sebuah item darinya, atau jendela aktif
adalah jendela Properties ketika
Anda mengedit properti-properti suatu kendali.
Gambar 1.3
Komponen-komponen dan kendali-kendali untuk Windows Forms
Form merupakan sebuah kontainer untuk
kendali-kendali dan komponen-komponen. Ketika Anda menggeret item-item dari Toolbox ke Form, Visual Studio akan membangkitkan kode yang menciptakan objek
tersebut dan menetapkan properti-properti dasarnya. Kode ini diperbarui ketika
properti-properti kendali atau komponen dimodifikasi pada IDE. Penghapus sebuah
kendali atau komponen dari Form akan
menghapus kode yang dibangkitkan terkait. IDE Visual Studio menempatkan kode
yang dibangkitkan pada sebuah file terpisah menggunakan kelas-kelas parsial (partial classes). Anda dapat menuliskan
sendiri konde ini, tetapi akan lebih mudah jika membiarkan Visual Studio untuk
menanganinya.
Setiap kendali atau komponen yang
disajikan pada bab ini berlokasi pada namespace System.Windows.Forms. Untuk menciptakan sebuah aplikasi Windows, Anda umumnya menciptakan
sebuah Windows Form, menetapkan
properti-propertinya, menambahkan kendali-kendali pada Form, mengimplementasikan event-handler (metode) yang merespon event-event yang dibangkitkan oleh kendali. Gambar 1.4 mencantumkan
beberapa properti, metode, dan event pada Form.
Ketika Anda menciptakan kendali-kendali
dan event-handler-nya, Visual Studio
membangkitkan kode yang terkait dengan GUI. Pada pemrograman visual, yang perlu
Anda lakukan adalah menulis kode tubuh pada event
handler untuk mengindikasikan aksi apa yang harus dilakukan program ketika event tertentu terjadi.
Properti, metode, dan event
pada Form
|
Penjelasan
|
Properti-properti
|
|
AcceptButton
|
Button yang diklik ketika Enter
ditekan.
|
AutoScroll
|
Nilai
bool yang menampilkan batang
penggeser (scrollbar) atau yang
tidak menampilkannya.
|
CancelButton
|
Button yang diklik ketika Esc
ditekan.
|
FormBorderStyle
|
Gaya
batas untuk Form (misalnya, none, single, three-dimensional).
|
Font
|
Jenis huruf teks yang ditampilkan
pada Form, dan jenis huruf default
untuk kendali-kendali ditambahkan pada Form.
|
Text
|
Teks
pada batang judul Form.
|
Metode-metode
|
|
Close
|
Menutup sebuah Form dan melepaskan semua sumberdayanya, seperti memori yang
digunakan untuk isi Form. Form yang telah ditutup tidak bisa
dibuka kembali.
|
Hide
|
Menyembunyikan
sebuah Form, tetapi tidak
menghancurkan Form tersebut atau
tidak pula melepaskan sumberdayanya.
|
Show
|
Menampilkan
sebuah Form yang tersembunyi.
|
Event
|
|
Load
|
Terjadi sebelum sebuah Form ditampilkan kepada pengguna. Handler untuk event ini ditampilkan pada editor Visual Studio ketika Anda
mengklik ganda pada Form di dalam
Visual Studio designer.
|
Gambar
1.4 Beberapa properti,
metode, dan event pada Form
1.3
Penanganan Event
Normalnya, seorang pengguna
berinteraksi dengan GUI pada aplikasi untuk mengindikasikan tugas-tugas yang
akan dilakukan aplikasi itu. Misalnya, ketika Anda menuliskan sebuah e-mail
pada aplikasi e-mail, pengklikan tombol Send
akan memberitahu aplikasi untuk mengirimkan e-mail tersebut ke alamat yang
diberikan. GUI merupakan event-driven. Ketika pengguna berinteraksi
dengan sebuah komponen GUI, interaksi (atau yang dikenal dengan event) akan memicu program untuk
melakukan sebuah pekerjaan. Beberapa event
umum yang menyebabkan aplikasi melakukan suatu pekerjaan mencakup pengklikan
sebuah Button, pengetikan di dalam
sebuah TextBox, pemilihan sebuah
item dari menu, penutupan jendela, dan penggeseran mouse. Semua kendali GUI memiliki event-event yang terkait
dengannya. Objek-objek dari tipe lain juga dapat memiliki event-event tertentu.
Sebuah metode yang melakukan pekerjaan ketika merespon suatu event dikenal dengan event handler, dan keselurutan proses
dalam merespon event dikendal dengan
penanganan event.
1.3.1
GUI Sederhana
Form pada aplikasi pada Gambar 1.5 memuat
sebuah Button yang dapat diklik oleh
pengguna untuk menampilkan sebuah MessageBox.
Pada baris 6, perhatikan deklarasi namespace,
yang disisipkan untuk setiap kelas yang Anda ciptakan. Namespace dipakai untuk mengorganisir grup-grup yang memuat
kelas-kelas berelasi. Setiap nama kelas sebenarnya merupakan kombinasi dari
nama namespacenya, sebuah titik (.),
dan nama kelas. Nama ini dikenal dengan nama kelas penuh (atau nama kelas
terkualifikasi penuh). Anda dapat menggunakan nama sederhana dari kelas (nama
kelas yang tidak terkualifikasi penuh) pada aplikasi. Jika Anda akan
menggunakan kembali kelas ini pada aplikasi lain, Anda dapat memakai nama
terkualifikasi penuh atau Anda dapat menuliskan sebuah direktif using sehingga Anda dapat merujuk kelas
tersebut menggunakan nama sederhana. Jika namespace
lain memuat sebuah kelas dengan nama sama, nama kelas terkualifikasi penuh
dapat dipakai untuk membedakan antara kelas-kelas pada aplikasi agar terhindar
dari konflik penamaan (tubrukan penamaan).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//
Gambar 1.5: ContohEventSederhanaForm.cs
//
Contoh penanganan event sederhana.
using
System;
using
System.Windows.Forms;
namespace
ContohEventSederhana
{
// Form yang menampilkan sebuah event
handle sederhana
public
partial class ContohEventSederhanaForm : Form
{
// konstruktor default
public
ContohEventSederhanaForm()
{
InitializeComponent();
} // akhir konstruktor default
// menangani event Button dari klikButton_Click
private void
klikButton_Click(object sender,
EventArgs e)
{
MessageBox.Show("Tombol diklik.");
} // akhir klikButton_Click
} // akhir kelas
ContohEventSederhanaForm
} //
akhir namespace ContohEventSederhana
|
Anda menciptakan sebuah Form yang memuat sebuah Button. Pertama, Anda menciptakan
sebuah aplikasi Windows baru.
Selanjutnya, menamai-ulang Form1.cs
menjadi ContohEventSederhana.cs pada
Solution Explorer. Lalu, Anda
mengklik Form pada designer, kemudian menggunakan jendela Properties untuk menetapkan properti Text dari Form menjadi “Contoh Event
Sederhana”. Kemudian, Anda menetapkan properti Font dari Form menjadi Segoe UI, 9pt, jika Anda
menginginkannya.
Anda bisa menggeret sebuah Button dari Toolbox ke Form. Pada
jendela Properties untuk Button, Anda menetapkan properti Name menjadi klikButton dan properti Text
menjadi Klik Saya.
Ketika pengguna mengklik Button pada contoh ini, Anda
menginginkan aplikasi untuk meresponnya dengan menampilkan sebuah MessageBox. Untuk melakukannya, Anda
perlu menciptakan sebuah event handler
untuk event Click pada Button. Anda
dapat menciptakan event handler ini dengan mengklik ganda Button pada Form, yang mendeklarasikan event
handler kosong berikut pada kode program:
private void klikButton_Click(object sender, EventArgs e)
{
}
Secara konvensi, IDE Visual Studio
menamai metode event-handler sebagai namaObjek_namaEvent (misalnya, klikButton_Click).
Event handler klikButton_Click dieksekusi ketika pengguna
mengklik kontrol klikButton.
Setiap event handler menerima dua parameter ketika ia dipanggil. Pertama,
sebuah referensi object yang umumnya
dinamai dengan sender (sebuah
referensi ke objek yang akan membangkitkan event).
Kedua adalah sebuah referensi yang menunjuk ke objek argumen event bertipe EventArgs, yang umumnya dinamai dengan e. Objek ini memuat informasi-informasi lain seputar event yang terjadi. EventArgs merupakan kelas basis untuk semua kelas yang
merepresentasikan informasi event.
Untuk menampilkan sebuah MessageBox yang merespon event tersebut, Anda bisa menyisipkan
statemen
MessageBox.Show( "Tombol diklik." );
pada tubuh event handler. Event handler
yang dihasilkan ditampilkan pada baris 18-21 pada Gambar 1.5. Ketika Anda
mengeksekusi aplikasi dan mengklik Button,
sebuah MessageBox akan muncul yang
menampilkan teks “Tombol diklik”.
1.3.2
Kode GUI yang Dibangkitkan oleh Visual Studio
Visual Studio menempatkan kode GUI yang
dibangkitkan pada file Designer.cs
dari Form (ContohEventSederhanaForm.Designer.cs pada contoh ini). Anda dapat
membuka file ini dengan mengekspansi simpul pada jendela Solution Explorer untuk file yang sekarang sedang Anda kerjakan (ContohEventSederhanaForm.cs) dan
mengklik ganda nama file yang diakhiri dengan Designer.cs. Gambar 1.6 dan Gambar 1.7 menampilkan isi file ini.
IDE menyusutkan kode pada baris 23-57 pada Gambar 1.7 secara default. Anda bisa
mengklik ikon + pada baris 23 untuk
mengekspansi kode itu, kemudian mengklik klik – untuk menyusutkannya.
Sekarang setelah Anda mempelajari kelas
dan objek secara detil, kode ini akan lebih mudah dimengerti. Karena kode ini
diciptakan secara otomatis oleh Visual Studio, Anda umumnya tidak perlu
mempelajarinya. Anda tidak perlu memahami hampir semua kode yang ditampilkan di
sini untuk membangun aplikasi-aplikasi GUI. Namun, jika Anda bisa mengamati
lebih dekat agar memahami bagaimana aplikasi GUI bekerja.
Kode yang dibangkitkan Visual Studio
yang mendefinisikan GUI sebenarnya merupakan bagian dari kelas Form. Pada kasus ini, ContohEventSederhana. Baris 3 pada
Gambar 1.6 (dan baris 9 pada Gambar 1.5) menggunakan pemodifikasi partial, yang
memampukan kelas ini untuk dipecah menjadi beberapa file, yang mencakup
file-file yang memuat kode yang dibangkitkan Visual Studio dan yang memuat kode yang Anda tulis. Baris 58 pada
Gambar 1.7 mendeklarasikan klikButton
yang diciptakan pada mode Design. Ia
dideklarasikan sebagai sebuah variabel instans dari kelas ContohEventSederhanaForm. Secara default, semua deklarasi variabel
untuk kendali-kendali yang diciptakan dengan jendela design C# memiliki
pemodifikasi akses private. Kode
juga memuat metode Dispose untuk
melepaskan sumberdaya (baris 14-21) dan metode InitializeComponent (baris 29-54), yang memuat kode yang
menciptakan Button, kemudian
menetapkan beberapa properti dari Button
dan Form. Visual Studio menambahkan
komentar pada kode yang dibangkitkannya, seperti pada baris 33-35. Baris 42
dibangkitkan ketika Anda menciptakan event
handler untuk event Click pada Button.
Metode InitializeComponent dipanggil ketika Form diciptakan, dan dipakai untuk menetapkan properti-properti
judul Form, ukuran Form, ukuran kendali, dan teks kendali.
Visual Studio juga menggunakan kode pada metode ini untuk menciptakan GUI yang
Anda lihat pada design view.
Pengubahan kode pada InitializeComponent
bisa menyebabkan Visual Studio tidak menampilkan GUI secara benar.
Gambar 1.6 Potongan
pertama dari file kode yang dibangkitkan oleh Visual Studio
Gambar 1.7 Potongan kedua
dari file kode yang dibangkitkan oleh Visual Studio
1.3.3
Delegate dan Mekanisme Penanganan-Event
Kendali yang memicu sebuah event disebut dengan event sender. Metode penanganan-event (event handler) merespon event tertentu yang dipicu oleh sebuah
kendali. Ketika event terjadi, event sender akan memanggil event handlernya untuk melakukan sebuah
pekerjaan.
Delegate
Event handler dihubungkan ke event pada sebuah kendali melalui objek-objek khusus yang dinamakan
dengan delegate. Objek delegate memuat sebuah referensi yang
menunjuk ke suatu metode dengan sidik (tanda-tangan) yang ditetapkan oleh
deklarasi tipe delegate. Kendali GUI
memiliki delegate terdefinisi untuk
tiap event yang dipicunya. Sebagai
contoh, delegate untuk event Click pada sebuah Button
bertipe EventHandler (namespace System). Jika Anda melihat tipe ini pada dokumentasi help, Anda akan melihat bahwa ia
dideklarasikan sebagai berikut:
public
delegate void EventHandler( object sender, EventArgs e );
Delegate ini menggunakan katakunci delegate untuk mendeklarasikan sebuah
tipe delegate bernama EventHandler, yang dapat menampung
referensi-referensi yang menunjuk ke metode-metode yang menghasilkan void dan menerima dua parameter. Salah
satu parameter tersebut bertipe object
(event sender) dan parameter lain bertipe EventArgs. Jika Anda membandingkan deklarasi delegate tersebut dengan header
klikButton_Click (Gambar 1.5, baris
18), maka Anda akan melihat bahwa event
handler ini memenuhi persyaratan sebagai delegate EventHandler.
Metode yang Dipanggil Delegate
Event sender memanggil sebuah objek delegate seperti metode. Karena setiap event handler dideklarasikan sebagai delegate, event sender dapat memanggil delegate
tertentu ketika sebuah event terjadi.
Misalnya, sebuah Button memanggil delegate EventHandler yang merespon event
Click pada Button tersebut. Tugas delegate
adalah memanggil metode yang sesuai. Agar metode klikButton_Click dapat dipanggil, Visual Studio menugaskan klikButton_Click kepada delegate, seperti ditampilkan pada baris
42 pada Gambar 1.7. Kode ini ditambahkan oleh Visual Studio ketika Anda
mengklik ganda kendali Button pada
mode Design. Ekspresi
new System.EventHandler(this.klikButton_Click);
menciptakan sebuah objek delegate EventHandler dan menginisialisasinya dengan metode klikButton_Click. Baris 42 menggunakan
operator += untuk menambahkan delegate tersebut pada event Click pada Button. Ini
mengindikasikan bahwa klikButton_Click
akan merespon ketika seorang pengguna mengklik Button tersebut. Operator +=
dioverload oleh kelas delegate yang diciptakan oleh kompiler.
Anda sebenarnya dapat menetapkan bahwa beberapa
metode yang berbeda bisa dipanggil sekaligus dalam merespon sebuah event dengan menambahkan delegate-delegate lain pada event Click dari Button menggunakan statemen-statemen yang mirip dengan baris 42
pada Gambar 1.7.
1.3.4
Cara Lain untuk Menciptakan Event Handler
Untuk aplikasi GUI pada Gambar 1.5,
Anda mengklik dua kali kendali Button
pada Form untuk menciptakan event handlernya. Teknik ini menciptakan
sebuah event handler bagi event
default untuk sebuah kendali. Event
default merupakan event yang paling
sering dipakai. Kendali dapat membangkitkan banyak event yang berbeda, dan setiap event
memiliki event handlernya sendiri.
Sebagai contoh, aplikasi Anda dapat pula menyediakan sebuah event handler untuk event MouseHover pada Button, yang terjadi ketika pointer mouse tetap pada posisi di atas Button pada periode waktu yang singkat.
Sekarang akan didiskusikan bagaimana menciptakan event handler untuk sebuah event
yang bukan event default pada sebuah
kendali.
Menggunakan Jendela Properties untuk Menciptakan Event Handler
Anda dapat menciptakan beberapa event handler melalui jendela Properties. Jika Anda memilih sebuah
kendali pada Form, maka Anda bisa
mengklik ikon Events pada jendela Properties dan semua event untuk kendali tersebut akan
ditampilkan. Anda bisa mengklik dua kali sebuah nama event untuk menampilkan event
handler pada editor, jika event
handler tersebut ada. Anda dapat melihat jendela Properties atas sebuah kendali dengan mengklik ikon Properties (Gambar 1.8).
Gambar 1.8 Melihat event-event untuk sebuah
kendali Button pada jendela Properties
Satu metode dapat menangani beberapa event dari beberapa kendali. Sebagai
contoh, event Click untuk tiga Button
dapat ditangani oleh metode yang sama. Anda dapat menetapkan sebuah event handler untuk beberapa event
dengan memilih kendali-kendali dan memilih satu metode pada jendela Properties. Jika Anda menciptakan
sebuah event handler baru dengan cara
ini, Anda sebaiknya menamainya ulang dengan sesuai. Anda juga dapat memilih
setiap kendali secara individual dan menetapkan metode yang sama untuk tiap event.
1.3.5
Mencari Lokasi Event
Anda bisa membaca dokumentasi Visual
Studio untuk belajar mengenai event-event berbeda oleh tiap kendali. Untuk
melakukannya, Anda bisa memilih sebuah kendali pada IDE Visual Studio dan
menekan kunci F1 untuk menampilkan help online untuk kendali tersebut (Gambar
1.9). Halaman web yang ditampilkan memuat informasi dasar mengenai kelas
kendali. Di kolom kiri halaman terdapat beberapa link untuk mendapatkan informasi lain mengenai kelas Button (yaitu, link Members, Methods, Properties, dan Events).
Gambar 1.9 Daftar event-event untuk kendali Button
Selanjutnya, Anda bisa mengklik nama
sebuah event untuk melihat penjelasan
dan contoh-contoh kegunaanya. Anda bisa mengklik event Click untuk
menampilkan informasi pada Gambar 1.10.
Gambar 1.10 Detil event Click
Event Click
merupakan sebuah anggota dari kelas Control
(kelas basis tak-langsung dari kelas Button).
Bagian Remarks pada halaman
mendiskusikan detil dari event yang
dipilih. Anda juga dapat menggunakan Object
Browser untuk melihat informasi ini. Object
Browser hanya menampilkan anggota-anggota yang awalnya didefinisikan pada
suatu kelas. Event Click awalnya didefinisikan pada kelas Control dan diwarisi oleh kelas Button. Karena itu, Anda perlu melihat
kelas Control pada Object Browser untuk melihat
dokumentasi tentang event Click.
1.4
Properti dan Tataletak Kendali
Bagian ini akan mendiskusikan tentang
properti pada kendali. Kendali mewarisi kelas Control (namespace System.Windows.Forms). Gambar 1.11
mencantumkan beberapa properti dan metode dari kelas Control. Properti-properti yang ditunjukkan di sini dapat
ditetapkan untuk banyak kendali. Sebagai contoh, properti Text menetapkan teks yang muncul pada sebuah kendali. Lokasi dari
teks ini bervariasi tergantung dari kendali. Pada sebuah Form, teks muncul di batang judul, tetapi teks pada sebuah Button muncul di mukanya.
Metode Select mengalihkan fokus ke sebuah kendali dan menjadikannya
sebagai kendali aktif. Ketika Anda menekan kunci Tab pada sebuah aplikasi Windows yang sedang dieksekusi,
kendali-kendali mendapatkan fokus secara berurutan sesuai yang ditetapkan oleh
properti TabIndex. Properti ini
ditetapkan oleh Visual Studio berdasarkan urutan dimana di dalamnya
kendali-kendali ditambahkan pada sebuah Form,
tetapi Anda dapat mengubah urutan ini. Properti TabIndex berguna bagi pengguna yang memasukkan informasi pada
banyak kendali, seperti sekumpulan TextBox
yang merepresentasikan nama, alamat, dan nomor telepon pengguna. Pengguna dapat
memasukkan informasi, kemudian dengan cepat memilih kendali berikutnya dengan
menekan kunci Tab.
Properti Enabled mengindikasikan apakah pengguna dapat berinteraksi dengan
sebuah kendali untuk membangkitkan sebuah event.
Seringkali, ketika sebuah kendali dinon-aktifkan, hal itu karena tidak ada opsi
yang disediakan bagi pengguna pada saat itu. Sebagai contoh, aplikasi editor
teks seringkali menon-aktifkan perintah “paste” sampai pengguna menyalin teks.
Pada banyak kasus, teks pada kendali yang dinon-aktifkan tampak abu-abu (bukan
hitam). Anda juga dapat menyembunyikan sebuah kendali dari pengguna tanpa harus
menon-aktifkan kendali dengan menetapkan properti Visible menjadi false
atau dengan memanggil metode Hide.
Pada kasus itu, kendali masih ada tetapi tidak terlihat pada Form.
Metode dan properti pada
Control
|
Penjelasan
|
Properti-properti
|
|
BackColor
|
Warna
lata belakang pada kendali.
|
BackgroundImage
|
Citra
latar belakang pada kendali.
|
Enabled
|
Menetapkan apakah kendali diaktifkan
(misalnya, jika pengguna dapat berinteraksi dengan kendali tersebut).
Umumnya, bagian dari sebuah kendali yang dinon-aktifkan tampak abu-abu
sebagai indikasi visual kepada pengguna bahwa kendali sedang tidak aktif.
|
Focused
|
Mengindikasikan
apakah kendali memiliki fokus.
|
Font
|
Font yang dipakai untuk menampilkan teks
pada kendali.
|
ForeColor
|
Warna latar depan pada kendali. Hal
ini biasanya untuk menentukan warna teks pada properti Text.
|
TabIndex
|
Urutan tab dari kendali. Ketika kunci
tab ditekan, fokus akan beralih ke kendali-kendali lain berdasarkan urutan
tab. Anda dapat menetapkan urutan ini.
|
TabStop
|
Jika true, maka seorang pengguna dapat memberikan fokus pada kendali
ini lewat kunci Tab.
|
Text
|
Teks yang berkaitan dengan kendali
tertentu. Lokasi dan penampilan teks bervariasi tergantung dari tipe kendali.
|
Visible
|
Mengindikasikan
apakah kendali terlihat atau tidak.
|
Metode-metode
|
|
Hide
|
Menyembunyikan
kendali (menetapkan properti Visible
menjadi false).
|
Select
|
Mendapatkan
fokus.
|
Show
|
Menampilkan
kendali (menetapkan properti Visible
menjadi true).
|
Gambar
1.11 Metode-metode dan
properti-properti pada kelas Control
Anchoring dan Docking
Anda dapat menggunakan anchoring dan docking untuk menetapkan tataletak dari kendali-kendali di dalam
sebuah kontainer (seperti Form). Anchoring menyebabkan kendali-kendali
tetap berada pada jarak tetap dari sisi-sisi kontainer meskipun ukuran
kontainer diubah. Anchoring
meningkatkan kenyamanan pengguna. Misalnya, jika pengguna mengharapkan sebuah
kendali untuk muncul pada suatu pojok aplikasi, anchoring memastikan bahwa kendali akan selalu berada di pojok,
meskipun pengguna mengubah ukuran Form.
Docking melekatkan sebuah kendali
pada suatu kontainer sehingga kendali tersebut melebar menempati semua sisi
atau menempati keseluruhan area pada kontainer. Sebagai contoh, penerapan docking pada sebuah tombol di sisi atas
kontainer menyebabkan ia melebar menempati keseluruhan area atas kontainer,
tanpa memandang lebar kontainer.
Ketika kontainer induk diubah
ukurannya, kendali-kendali anchored
akan berpindah (dan bisa saja berubah ukuran) sehingga jarak dari sisi-sisi
kontainer tidak berubah. Secara default, hampir semua kendali dianchor ke pojok kiri-atas pada Form. Untuk melihat pengaruh dari
penerapan anchor pada sebuah kendali,
diciptakan sebuah aplikasi Windows
sederhana yang memuat dua Button.
Anda menerapkan anchor terhadap satu
kendali ke pojok kanan-bawah dengan menetapkan properti Anchor seperti ditampilkan pada Gambar 1.12.
Gambar 1.12 Memanipulasi
properti Anchor dari sebuah kendali
Anda bisa membiarkan kendali lainnya dianchor secara default (top, left). Anda
bisa mengeksekusi aplikasi ini dan mengubah ukuran Form. Perhatikan bahwa Button
yang dianchor ke pojok kanan-bawah
selalu berada pada jarak yang sama dari pojok kanan-bawah Form (Gambar 1.13), tetapi kendali lainnya tetap pada jarak yang
sama dari pojok kiri-atas Form.
Gambar 1.13 Demonstrasi anchoring
Kadangkala, diperlukan bagi sebuah
kendali untuk menempati keseluruhan sisi pada Form, meski ketika Form
diubah ukurannya. Sebagai contoh, sebuah kendali seperti batang status umumnya
tetap berada di sisi bawah Form.
Mekanisme docking memampukan sebuah
kendali untuk menempati keseluruhan sisi (kiri, kanan, atas, atau bawah) pada
kontainer induknya.
Ketika kendali induk diubah ukurannya,
kendali yang didock juga berubah
ukuran. Pada Gambar 1.14, sebuah Button
didock di sisi atas Form (menempati porsi atas Form), dengan menetapkan properti Dock menjadi nilai Top. Ketika Form diubah
ukurannya, Button tersebut juga
berubah ukuran sesuai dengan ukuran baru Form.
Form memiliki properti Padding yang menetapkan jarak antara
kendali-kendali yang didock dengan
tepi-tepi Form. Properti ini
menetapkan empat nilai (satu untuk tiap sisi), dan setiap nilai ditetapkan 0
secara default. Beberapa properti tataletak kendali dicantumkan pada Gambar
1.15.
Gambar 1.14 Mendocking sebuah Button di sisi atas Form
Properti-properti tataletak kelas Control
|
Penjelasan
|
Anchor
|
Memampukan
sebuah kendali agar tetap pada jarak yang sama dari sisi-sisi kontainer
meskipun jika ukuran kontainer berubah.
|
Dock
|
Memampukan
sebuah kendali menempati satu sisi dari kontainernya.
|
Padding
|
Menetapkan ruang antara sisi-sisi
sebuah kontainer dan kendali-kendali yang didock. Nilai default adalah 0, menyebabkan kendali tampak menempel
di sisi-sisi kontainer.
|
Location
|
Menetapkan
lokasi (himpunan koordinat) dari pojok kiri-atas dari kendali, dalam
kaitannya dengan pojok kiri-atas kontainer.
|
Size
|
Menetapkan
ukuran dari kendali dalam piksel sebagai sebuah objek Size, yang memiliki properti-properti Width dan Height.
|
MinimumSize,
MaximumSize
|
Mengindikasikan ukuran minimum dan maksimun
dari sebuah kendali.
|
Gambar
1.15 Properti-properti
tataletak kelas Control
Properti Anchor dan Dock dari
sebuah Control ditetapkan dengan
kaitannya terhadap kontainer induk Control,
yang dapat berupa sebuah Form atau
kontainer induk lainnya (seperti sebuah Panel).
Ukuran Form minimum dan maksimum
(atau Control lainnya) dapat
ditetapkan melalui properti MinimumSize
dan MaximumSize. Keduanya bertipe Size, yang memiliki properti Width dan Height untuk menetapkan ukuran Form.
Properti MinimumSize dan MaximumSize memampukan Anda untuk
mendesain tataletak GUI untuk ukuran rentang tertentu. Pengguna tidak dapat
membuat sebuah Form lebih kecil dari
ukuran yang ditetapkan lewat properti MinimumSize
dan tidak dapat membuat sebuah Form
lebih besar dari ukuran yang ditetapkan lewat properti MaximumSize. Untuk menetapkan sebuah Form dengan ukuran tetap (dimana Form tidak dapat diubah ukurannya oleh pengguna), Anda bisa
menetapkan ukuran minimum dan maksimum dengan nilai sama.
Menggunakan Visual Studio Untuk Mengedit Tataletak GUI
Visual Studio membantu Anda untuk
menata GUI. Ketika Anda menggeret sebuah kendali ke sebuah Form, garis-garis biru muncul untuk menolong Anda memposisikan
kendali relatif terhadap kendali lainnya (Gambar 1.16) dan terhadap tepi-tepi Form. Visual Studio juga menyediakan
menu Format, yang memuat opsi-opsi
untuk memodifikasi tataletak GUI Anda. Menu Format tidak muncul pada IDE kecuali jika Anda menyeleksi satu atau
lebih kendali pada design view. Menu
Format juga memampukan Anda untuk memodifikasi ruang antar kendali atau untuk
menempatkan sebuah kendali ke tengah suatu Form.
Gambar 1.16 Garis-garis biru untuk membantu
memposisikan kendali
1.5
Label, TextBox, dan Button
Label menyediakan informasi teks dan
didefinisikan dengan kelas Label
(sebuah kelas yang diderivasi dari Control). Sebuah Label menampilkan teks yang tidak dapat dimodifikasi pengguna
secara langsung. Teks pada Label
dapat diubah secara programatikal dengan memodifikasi properti Text pada Label. Gambar 1.17 mencantumkan beberapa properti Label.
Properti-properti kelas Label
|
Penjelasan
|
Font
|
Jenis
huruf dari teks pada Label.
|
Text
|
Teks
pada Label.
|
Align
|
Penyejajaran dari teks pada Label secara horisontal (left, center, atau right)
dan secara vertikal (top, middle, atau bottom). Nilai defaultnya adalah top, left.
|
Gambar 1.17 Beberapa properti dari kelas Label
Kotak teks (dari kelas TextBox) merupakan sebuah area dimana
di dalamnya teks dapat ditampilkan oleh program atau pengguna dapat mengetikkan
teks melalui papanketik. TextBox password merupakan sebuah TextBox yang menyembunyikan informasi
yang dientrikan pengguna. Ketika pengguna mengetikkan karakter-karakter, TextBox password menyamarkan masukan pengguna dengan menampilkan karakter password. Jika Anda menetapkan properti UseSystemPasswordChar menjadi true, maka TextBox menjadi sebuah TextBox
password. Pengguna sering menemukan
kedua jenis TextBox, ketika ingin log in ke sebuah komputer atau situs
web, dimana TextBox nama pengguna
meminta pengguna mengentrikan namanya; TextBox
password meminta pengguna untuk mengentrikan
katakuncinya. Gambar 1.18 mencantumkan beberapa properti dan sebuah event dari kelas TextBox.
Properti-properti dan event
pada kelas TextBox
|
Penjelasan
|
Properti-properti
|
|
AcceptsReturn
|
Jika
true pada sebuah TextBox baris jamak, maka penekanan Enter pada TextBox akan menciptakan sebuah baris baru. Jika false (default), maka penekanan Enter sama dengan penekanan Button default pada Form. Button default adalah yang ditugaskan kepada properti AcceptButton pada Form.
|
Multiline
|
Jika
true, maka TextBox dapat menempati beberapa baris. Nilai defaultnya adalah false.
|
ReadOnly
|
Jika true, maka TextBox
memiliki warna lata abu-abu, dan isi teksnya tidak dapat diedit. Nilai
defaultnya adalah false.
|
ScrollBars
|
Untuk
kotak teks baris jamak, properti ini mengindikasikan batang penggeser (scrollbar) mana yang akan muncul (None (default), Horizontal, Vertical,
atau Both).
|
Text
|
Isi
teks pada TextBox.
|
UseSystemPasswordChar
|
Ketika true, TextBox menjadi
sebuah TextBox password, dan karakter kunci
menyamarkan setiap karakter yang diketikkan pengguna.
|
Event
|
|
TextChanged
|
Dipicu
ketika teks berubah pada sebuah TextBox
(yaitu, ketika pengguna menambah atau menghapus karakter-karater) Ketika Anda
mengklik ganda kendali TextBox
pada mode Design, sebuah event handler kosong untuk event
ini akan dibangkitkan.
|
Gambar
1.18 Beberapa properti dan
sebuah event pada kelas TextBox
Tombol adalah sebuah kendali yang dapat
diklik pengguna untuk memicu aksi tertentu atau untuk memilih opsi tertentu
pada program. Seperti yang akan Anda lihat, program dapat menggunakan beberapa
jenis tombol, seperti checkbox dan radio button. Semua kelas tombol
diderivasi dari kelas ButtonBase (namespace System.Windows.Forms), yang mendefinisikan fitu-fitur tombol. Pada
bagian ini, akan didiskusikan kelas Button,
yang umumnya memampukan pengguna untuk memberikan perintah kepada aplikasi.
Gambar 1.19 mencantumkan beberapa properti dan sebuah event pada kelas Button.
Properti-properti dan event
pada kelas Button
|
Penjelasan
|
Properti-properti
|
|
Text
|
Menetapkan teks yang akan ditampilkan
pada wajah Button.
|
FlatStyle
|
Memodifikasi
penampilan sebuah Button. Atribut Flat (agar Button tidak memiliki penampilan tiga-dimensi), Popup (agar Button tampil rata ketika pengguna menggeser pointer mouse ke atas Button),
Standard (penampilan tiga
dimensi), dan System (penampilan Button diatur oleh sistem operasi).
Nilai defaultnya adalah Standard.
|
Event
|
|
Click
|
Dipicu ketika pengguna mengklik
Button. Ketika Anda mengklik ganda sebuah Button pada design view,
suatu event handler kosong untuk event ini akan diciptakan.
|
Gambar
1.19 Beberapa properti dan
sebuah event pada kelas Button
Gambar 1.20 menggunakan sebuah TextBox, sebuah Button, dan sebuah Label.
Pengguna memasukkan teks ke dalam kotak password
dan menglik Button, menyebabkan
masukan teks ditampilkan pada Label.
Normalnya, Anda tidak menampilkan teks ini. Tujuan dari TexBox password adalah
untuk menyembunyikan teks yang sedang diketikkan oleh pengguna. Ketika pengguna
mengklik tombol Tampilkan Saya,
aplikasi ini akan menarik teks yang diketikkan pengguna pada TextBox password dan menampilkannya pada sebuah 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
|
//
Gambar 1.20: UjiLabelTextBoxButton.cs
//
Menggunakan TextBox dan Label untuk menampilkan teks
//
tersembunyi pada sebuah TextBox password.
using
System;
using
System.Windows.Forms;
namespace
UjiLabelTextBoxButton
{
// Form yang menciptakan sebuah TextBox
password dan
// sebuah Label untuk menampilkan isi
TextBox
public
partial class UjiLabelTextBoxButtonForm : Form
{
// konstruktor default
public
UjiLabelTextBoxButtonForm()
{
InitializeComponent();
} // akhir konstruktor default
// menampilkan masukan pengguna pada Label
private void
tampilPasswordButton_Click(
object sender, EventArgs e)
{
//
menampilkan teks yang diketikkan pengguna
tampilPasswordLabel.Text
= masukanPasswordTextBox.Text;
} // akhir metode tampilPasswordButton_Click
} // akhir kelas
UjiLabelTextBoxButtonForm
} //
akhir namespace UjiLabelTextBoxButton
|
Pertama, Anda menciptakan GUI dengan
menggeret kendali-kendali (sebuah TextBox,
sebuah Button, dan sebuah Label) pada Form. Setelah kendali-kendali diposisikan, Anda bisa mengubah
nama-namanya pada jendela Properties
dari nilai-nilai defaultnya (textBox1,
button1, dan label1) menjadi nama yang lebih deskriptif (pada kasus ini, tampilPasswordLabel, tampilPasswordButton, dan masukanPasswordTextBox). Properti Name pada jendela Properties memampukan Anda untuk mengubah nama variabel bagi sebuah
kendali. Visual Studio menciptakan kode yang dibutuhkan dan menempatkannya ke
dalam metode InitializeComponent
dari kelas parsial pada file UjiLabelTextBoxButtonForm.Designer.cs.
Anda menetapkan properti Text dari tombol tampilPasswordButton menjadi “Tampilkan
Saya” dan menghapus Text pada tampilPasswordLabel sehingga ia kosong
ketika program mulai dieksekusi. Properti BorderStyle
dari tampilPasswordLabel ditetapkan
menjadi Fixed3D, sehingga Label Anda memiliki penampilan
tiga-dimensi. Anda juga mengubah properti TextAlign
menjadi MiddleLeft sehingga teks
pada Label itu ditampilkan dengan
penyejajaran ke tengah. Karakter katakunci untuk masukanPasswordTextBox ditentukan oleh pengaturan sistem operasi
Anda ketika Anda menetapkan properti UseSystemPasswordChar
menjadi true.
Anda menciptakan sebuah event handler untuk tampilPasswordButton dengan mengklik dua kali pada kendali ini pada
mode Design. Anda menambahkan baris
24 pada tubuh event handler ini.
Ketika pengguna mengklik tombol Tampilkan
Saya pada saat aplikasi dieksekusi, baris 24 akan membaca teks yang
dimasukkan pengguna di dalam masukanPasswordTextBox
dan menampilkannya pada tampilPasswordLabel.
1.6
GroupBox dan Panel
GroupBox dan Panel dipakai untuk menata kendali-kendali pada sebuah GUI. GroupBox dan Panel umumnya digunakan untuk mengelompokkan kendali-kendali yang
memiliki fungsionalitas yang hampir sama atau kendali-kendali yang berelasi
pada sebuah GUI. Semua kendali pada sebuah GroupBox
atau Panel bergeser bersamaan ketika
GroupBox atau Panel digeser. Selain itu, GroupBox
dan Panel juga dapat dipakai untuk
menampilkan atau menyembunyikan sehimpunan kendali secara bersamaan. Ketika
Anda memodifikasi properti Visible
dari sebuah kontainer, hal itu akan membalikkan visibilitas semua kendali yang
ada di dalamnya.
Perbedaan utama antara kedua kendali
ini adalah bahwa GroupBox dapat
menampilkan kapsion (teks) dan tidak dapat memuat batang penggeser (scrollbar), sedangkan Panel dapat memuat batang penggeser dan
tidak menampilkan kapsion. GroupBox
memiliki batas tipis secara default; Panel
dapat diatur sehingga ia memiliki batas-batas dengan menetapkan properti BorderStylenya. Gambar 1.21 dan Gambar
1.22 mencantumkan beberapa properti GroupBox
dan Panel.
Properti-properti pada kelas
GroupBox
|
Penjelasan
|
Controls
|
Menetapkan kendali-kendali yang
dimuat oleh GroupBox.
|
Text
|
Menampilkan
teks kapsion yang ditampilkan di sisi atas GroupBox.
|
Gambar 1.21 Beberapa properti pada kelas GroupBox
Properti-properti pada kelas
Panel
|
Penjelasan
|
AutoScroll
|
Mengindikasikan
apakah batang penggeser (scrollbar)
akan muncul ketika Panel terlalu
kecil untuk menampilkan semua kendali. Nilai defaultnya adalah false.
|
BorderStyle
|
Menetapkan
batas Panel. Nilai defaultnya
adalah None; opsi-opsi lain adalah
Fixed3D dan FixedSingle.
|
Controls
|
Sekumpulan
kendali-kendali yang dimuat oleh Panel.
|
Gambar
1.22 Beberapa properti
pada kelas Panel
Untuk menciptakan sebuah GroupBox, Anda bisa menggeret ikonnya
dari Toolbox ke sebuah Form. Kemudian, Anda menggeret
kendali-kendali yang baru dari ToolBox
ke GroupBox. Kendali-kendali ini
ditambahkan ke properti Controls
pada GroupBox dan menjadi bagian
dari GroupBox. Properti Text pada GroupBox menetapkan kapsion.
Untuk menciptakan sebuah Panel, Anda bisa menggeret ikonnya dari
Toolbox ke sebuah Form. Anda kemudian dapat menambahkan
kendali-kendali secara langsung ke Panel
dengan menggeretnya dari Toolbox ke Panel. Untuk mengaktifkan batang
penggeser, Anda menetapkan properti AutoScroll
menjadi true. Jika Panel diubah ukurannya dan tidak dapat
menampilkan semua kendalinya, maka batang pengeser akan muncul (Gambar 1.23).
Batang penggeser dapat dipakai untuk menampilkan semua kendali yang ada di
dalam Panel, baik pada saat
perancangan maupun saat eksekusi. Pada Gambar 1.23, Anda menetapkan properti BorderStyle pada Panel menjadi FixedSingle
sehingga Anda dapat melihat Panel
pada Form.
Gambar 1.23 Menciptakan sebuah Panel dengan batang penggeser
Program pada Gambar 1.24 menggunakan
sebuah GroupBox dan sebuah Panel untuk menata beberapa Button. Ketika Button-Button ini
diklik, event handlernya akan
mengubah teks pada sebuah 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
|
//
Gambar 1.24: ContohGroupBoxDanPanel.cs
//
Menggunakan GroupBox dan Panel untuk menata beberapa Button.
using
System;
using
System.Windows.Forms;
namespace
ContohGroupBoxDanPanel
{
// Form yang menampilkan sebuah GroupBox
dan sebuah Panel
public
partial class ContohGroupBoxDanPanelForm : Form
{
// konstruktor default
public
ContohGroupBoxDanPanelForm()
{
InitializeComponent();
} // akhir konstuktor default
// event handler untuk tombol Hallo
private
void halloButton_Click(object sender, EventArgs e)
{
pesanLabel.Text = "Hallo ditekan"; // mengubah teks pada Label
} // akhir metode halloButton_Click
// event handler untuk tombol Selamat
private
void selamatButton_Click(object sender, EventArgs e)
{
pesanLabel.Text = "Selamat ditekan"; // mengubah teks pada Label
} // akhir metode selamatButton_Click
// event handler untuk tombol Ujung
kiri
private
void kiriButton_Click(object sender, EventArgs e)
{
pesanLabel.Text = "Ujung Kiri ditekan"; //
mengubah teks pada Label
} // akhir metode kiriButton_Click
// event handler untuk tombol Ujung
Kanan
private
void kananButton_Click(object sender, EventArgs e)
{
pesanLabel.Text = "Ujung Kanan ditekan";
// mengubah teks pada Label
} // akhir metode kananButton_Click
} // akhir kelas
ContohGroupBoxDanPanelForm
} // akhir namespace ContohGroupBoxDanPanel
|
Komponen utamaGroupBox memuat duat Button,
yaitu halloButton (yang menampilkan
teks Hallo) dan selamatButton (yang menampilkan teks Selamat). Panel (utamaPanel) juga memuat dua Button, yaitu kiriButton (yang menampilkan teks Ujung Kiri) dan kananButton (yang menampilkan Ujung Kanan). Panel utamaPanel memiliki properti Autoscroll yang ditetapkan menjadi true, sehingga batang penggeser muncul
ketika isi Panel memerlukan ruang
yang lebih besar daripada area visibilitas Panel.
Label (dinamai pesanLabel) awalnya
kosong. Untuk menambahkan kendali-kendali pada utamaGroupBox atau utamaPanel
Visual Studio memanggil metode Add
dari properti Controls pada tiap
kontainer. Kode ini ditempatkan di dalam kelas parsial pada file ContohGroupBoxDanPanel.Designer.cs.
Event handler untuk empat Button ditempatkan pada baris 18-39. Baris 20, 26, 32, dan 38
mengubah teks dari pesanLabel untuk
mengindikasikan Button mana yang
ditekan pengguna.
1.7
CheckBox dan RadioButton
C# memiliki dua jenis tombol keadaan
yang dapat memiliki keadaan on/off atau true/false, yaitu CheckBox dan RadioButton.
Seperti kelas Button, kelas CheckBox dan RadioButton diderivasi dari kelas ButtonBase.
CheckBox
CheckBox merupakan sebuah kotak persegi kecil
yang kosong atau yang memuat tanda centang (tanda periksa). Ketika pengguna
mengklik sebuah CheckBox untuk
menyeleksinya, sebuah tanda centang muncul pada kotak tersebut. Jika pengguna
mengklik CheckBox kembali untuk
mendeseleksinya, tanda centang menjadi hilang. Anda dapat mengkonfigurasi
sebuah CheckBox untuk membalikkan (toggle) menjadi salah satu dari tiga
keadaan (checked, unchecked, atau indeterminate) dengan menetapkan properti ThreeStatenya menjadi true.
Sembarang jumlah CheckBox dapat
diseleksi pada waktu yang bersamaan. Beberapa properti dan event pada kelas CheckBox
dicantumkan pada Gambar 1.25.
Properti dan event pada CheckBox
|
Penjelasan
|
Properti-properti
|
|
Appearance
|
Secara default, properti ini
ditetapkan menjadi Normal, dan CheckBox ditampilkan sebagai kotak
periksa tradisional. Jika ia ditetapkan menjadi Button, CheckBox akan
ditampilkan sebagai sebuah Button
yang tampak ditekan ketika CheckBox
dicentang.
|
Checked
|
Mengindikasikan apakah CheckBox dicentang (memuat sebuah
tanda periksa) atau tidak dicentang (kosong). Properti ini menghasilkan
sebuah nilai bool. Defaultnya
adalah false (tidak dicentang).
|
CheckState
|
Mengindikasikan apakah CheckBox dicentang atau tidak
dicentang dengan sebuah nilai dari enumerasi CheckState (Checked, Unchecked, atau Indeterminate). Nilai Indeterminate
dipakai ketika keadaan tidak jelas apakah Checked atau Unchecked.
|
Text
|
Menetapkan
teks yang ditampilkan di sisi kanan CheckBox.
|
ThreeState
|
Ketika properti ini bernilai true, CheckBox memiliki tiga keadaan, yaitu, checked, unchecked, dan
indeterminate. Secara default,
properti ini bernilai false dan CheckBox hanya memiliki dua keadaan, checked dan unchecked.
|
Event
|
|
CheckedChanged
|
Dipicu ketika properti Checked berubah. Ini merupakan event default bagi CheckBox. Ketika pengguna mengklik
ganda kendali CheckBox pada design view, even handler kosong untuk event
ini akan dihasilkan.
|
CheckStateChanged
|
Dipicu
ketika properti CheckState
berubah.
|
Gambar
1.25 Beberapa properti dan
event pada kelas CheckBox
Program pada Gambar 1.26 memampukan
pengguna untuk memilih beberapa CheckBox
untuk mengubah gaya huruf pada sebuah Label.
Event handler untuk satu CheckBox dipakai untuk menebalkan huruf
dan event handler untuk CheckBox lainnya untuk memiringkan
huruf. Jika kedua CheckBox
diseleksi, gaya huruf akan ditetapkan tebal dan miring. Awalnya, tidak ada
satupun CheckBox yang dicentang.
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
|
//
Gambar 1.26: UjiCheckBoxForm.cs
//
Menggunakan CheckBox untuk mentoggle gaya huruf tebal dan miring.
using
System;
using
System.Drawing;
using
System.Windows.Forms;
namespace
UjiCheckBox
{
// Form memuat dua CheckBox agar pengguna
dapat memodifikasi teks
public
partial class UjiCheckBoxForm : Form
{
// konstruktor default
public
UjiCheckBoxForm()
{
InitializeComponent();
} // akhir konstruktor default
// mentoggle gaya huruf antara tebal
dan
// tidak tebal berdasarkan pengaturan
private void
tebalCheckBox_CheckedChanged(
object sender, EventArgs e)
{
keluaranLabel.Font
= new Font(keluaranLabel.Font,
keluaranLabel.Font.Style
^ FontStyle.Bold);
} // akhir metode tebalCheckBox_CheckedChanged
// mentoggle gaya huruf antara miring
dan
// tidak miring berdasarkan
pengaturan
private void
miringCheckBox_CheckedChanged(
object sender, EventArgs e)
{
keluaranLabel.Font
= new Font(keluaranLabel.Font,
keluaranLabel.Font.Style
^ FontStyle.Italic);
} // akhir metode miringCheckBox_CheckedChanged
} // akhir kelas UjiCheckBoxForm
} //
akhir namespace UjiCheckBox
|
Kendali tebalCheckBox memili properti Text
yang ditetapkan menjadi Bold.
Kendali italicCheckBox memiliki
properti Text yang ditetapkan
menjati Italic. Properti Text dari keluaranLabel ditetapkan menjadi Perhatikan perubahan gaya huruf ini. Setelah menciptakan
kendali-kendali, Anda mendefinisikan event-event handlernya. Pengklikan ganda terhadap kedua CheckBox pada saat perancangan akan menciptakan dua event handler CheckedChanged.
Untuk mengubah gaya huruf sebuah Label, Anda menetapkan properti Font menjadi objek Font yang baru (baris 23-24 dan 32-33). Kelas Font berada di dalam namespace System.Drawing.
Konstruktor Font yang digunakan di
sini mengambil gaya huruf terkini dan gaya huruf baru sebagai argumen. Argumen
pertama, keluaranLabel.Font,
menggunakan nama dan ukuran asli dari keluaranLabel.
Gaya ditetapkan dengan sebuah anggota dari enumerasi FontStyle, yang memuat Regular,
Bold, Italic, Strikeout, dan Underline. Gaya Strikeout menampilkan teks dengan sebuah garis melaluinya
(mencoretnya). Properti Style dari
objek Font adalah read-only,
jadi ia dapat ditetapkan hanya ketika objek Font diciptakan.
RadioButton
Tombol radio (didefinisikan dengan
kelas RadioButton) sama dengan CheckBox dimana keduanya memiliki dua
keadaan, terseleksi dan tak terseleksi (juga dikenal dengan terdeseleksi).
Namun, RadioButon biasanya muncul
dalam sebuah kelompok, dimana di dalamnya hanya ada satu RadioButton yang dapat diseleksi pada suatu waktu. Pemilihan satu RadioButton pada suatu grup akan
memaksa semua RadioButton yang lain
untuk dideseleksi. Oleh karena itu, RadioButton
dipakai untuk merepresentasikan suatu himpunan yang terdiri-dari opsi-opsi mutually exclusive (sekumpulan opsi yang
tidak dapat diseleksi pada waktu bersamaan).
Semua RadioButton yang ditambahkan pada sebuah kontainer menjadi bagian
dari kelompok yang sama. Untuk membagi RadioButton-RadioButton ke dalam beberapa grup, hal
itu harus dilakukan dengan menambahkannya pada kontainer-kontainer terpisah,
seperti GroupBox atau Panel. Beberapa properti dan sebuah event pada kelas RadioButton dicantumkan pada Gambar 1.27.
Properti dan event pada RadioButton
|
Penjelasan
|
Properti-properti
|
|
Checked
|
Mengindikasikan
apakah RadioButton diseleksi atau
tidak.
|
Text
|
Menetapkan
teks pada RadioButton.
|
Event
|
|
CheckedChanged
|
Dipicu setiap kali RadioButton diseleksi atau tak
diseleksi. Ketika Anda mengklik ganda sebuah kendali RadioButton pada design
view, sebuah event handler
kosong untuk event ini akan
dibangkitkan.
|
Gambar
1.26 Beberapa properti dan
event pada kelas RadioButton
Program pada Gambar 1.28 menggunakan
beberapa RadioButton untuk
memampukan pengguna dalam memilih opsi-opsi untuk sebuah MessageBox. Setelah menyeleksi atribut yang diinginkan, pengguna
menekan Button Tampil untuk
menampilkan MessageBox. Sebuah Label di pojok kiri-bawah menampilkan
hasil dari MessageBox (yaitu, Button mana yang diklik oleh pengguna).
Untuk menyimpan pilihan-pilihan
pengguna, Anda menciptakan dan menginisialisasi objek tipeIkon dan tipeTombol
(baris 13-14). Objek tipeIkon adalah
bertipe MessageBoxIcon, dan dapat
memiliki nilai-nilai Asterisk, Error, Exclamation, Hand, Information, None, Question, Stop, dan Warning.
Objek tipeTombol adalah bertipe MessageBoxButtons,
dan dapat memiliki nilai-nilai AbortRetryIgnore,
OK, OKCancel, RetryCancel, YesNo, dan YesNoCancel. Nama-nama ini mengindikasikas opsi-opsi yang disajikan
kepada pengguna pada MessageBox.
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
|
// Gambar 1.28: UjiRadioButtonForm.cs
// Menggunakan RadioButton untuk
menetapkan opsi-opsi jendela pesan.
using System;
using
System.Windows.Forms;
namespace UjiRadioButton
{
// Form memuat beberapa RadioButton--pengguna memilih satu
// dari setiap grup untuk menciptakan sebuah MessageBox
public partial class
UjiRadioButtonForm : Form
{
// menciptakan variabel-variabel yang menyimpan opsi pengguna
private MessageBoxIcon
tipeIkon;
private MessageBoxButtons
tipeTombol;
// konstruktor default
public UjiRadioButtonForm()
{
InitializeComponent();
} // akhir konstruktor default
// mengubah Button berdasarkan opsi yang dipilih oleh sender
private void tipeTombol_CheckedChanged(
object sender, EventArgs e)
{
if ( sender == okRadioButton ) // menampilkan tombol OK
tipeTombol = MessageBoxButtons.OK;
// menampilkan tombol OK dan
Cancel
else if ( sender ==
okCancelRadioButton )
tipeTombol = MessageBoxButtons.OKCancel;
// menampilkan tombol Abort,
Retry dan Ignore
else if ( sender ==
abortRetryIgnoreRadioButton )
tipeTombol = MessageBoxButtons.AbortRetryIgnore;
// menampilkan tombol Yes, No dan
Cancel
else if ( sender ==
yesNoCancelRadioButton )
tipeTombol = MessageBoxButtons.YesNoCancel;
// menampilkan tombol Yes dan No
else if ( sender ==
yesNoRadioButton )
tipeTombol = MessageBoxButtons.YesNo;
// menampilkan tombol Retry dan
Cancel
else
tipeTombol = MessageBoxButtons.RetryCancel;
} // akhir metode tipeTombol_CheckedChanged
// mengubah Icon berdasarkan opsi yang dipilih oleh sender
private void tipeIkon_CheckedChanged( object sender, EventArgs e)
{
if ( sender == asteriskRadioButton ) // menampilkan Icon asterisk
tipeIkon = MessageBoxIcon.Asterisk;
// menampilkan Icon error
else if ( sender ==
errorRadioButton )
tipeIkon = MessageBoxIcon.Error;
// menampilkan Icon tanda seru
else if ( sender ==
exclamationRadioButton )
tipeIkon = MessageBoxIcon.Exclamation;
// menampilkan Icon tangan
else if ( sender ==
handRadioButton )
tipeIkon = MessageBoxIcon.Hand;
// menampilkan Icon informasi
else if ( sender ==
informationRadioButton )
tipeIkon = MessageBoxIcon.Information;
// menampilkan Icon tanda tanya
else if ( sender ==
questionRadioButton )
tipeIkon = MessageBoxIcon.Question;
// menampilkan Icon stop
else if ( sender ==
stopRadioButton )
tipeIkon = MessageBoxIcon.Stop;
// menampilkan Icon peringatan
else
tipeIkon = MessageBoxIcon.Warning;
} // akhir metode tipeIkon_CheckedChanged
// menampilkan MessageBox dan Button yang ditekan pengguna
private void tampilButton_Click(object sender, EventArgs e)
{
//
menampilkan MessageBox dan menyimpan
// nilai
dari Button yang ditekan
DialogResult
hasil = MessageBox.Show(
"Ini merupakan MessageBox Anda.", "MessageBox Anda",
tipeTombol, tipeIkon);
// memeriksa Button mana yang
ditekan pada MessageBox
// mengubah teks yang ditampilkan
switch (hasil)
{
case DialogResult.OK:
tampilLabel.Text = "OK ditekan.";
break;
case DialogResult.Cancel:
tampilLabel.Text = "Cancel ditekan.";
break;
case DialogResult.Abort:
tampilLabel.Text = "Abort ditekan.";
break;
case DialogResult.Retry:
tampilLabel.Text = "Retry ditekan.";
break;
case DialogResult.Ignore:
tampilLabel.Text = "Ignore ditekan.";
break;
case DialogResult.Yes:
tampilLabel.Text = "Yes ditekan.";
break;
case DialogResult.No:
tampilLabel.Text = "No ditekan.";
break;
} // akhir switch
} // akhir metode tampilButton_Click
} // akhir kelas UjiRadioButtonForm
} // akhir namespace UjiRadioButton
|
Anda menciptakan dua GroupBox, satu untuk tiap nilai-nilai
enumerasi. Kapsion GroupBox adalah Tipe Tombol dan Ikon. Tiap GroupBox memuat beberapa RadioButton untuk opsi-opsi numerik,
dan properti-properti Text pada tiap
GroupBox ditetapkan dengan tepat.
Karena RadioButton – RadioButton dikelompokkan, jadi hanya
satu RadioButton yang dapat diseleksi
dari tiap GroupBox. Terdapat pula
sebuah Button (tampilButton) yang diberi label Tampil. Ketika pengguna mengklik Button ini, sebuah MessageBox
akan ditampilkan. Sebuah Label (tampilLabel) menampilkan Button mana
yang ditekan pengguna di dalam MessageBox.
Event handler untuk semua RadioButton menangani event CheckedChanged untuk tiap RadioButton.
Ketika sebuah RadioButton yang
dimuat di dalam GroupBox Tipe Tombol
diseleksi, event handler terkait
menetapkan tipeTombol menjadi nilai
tertentu. Baris 23-48 memuat penanganan event
untuk beberapa RadioButton tersebut.
Sama halnya, ketika pengguna menyeleksi salah satu RadioButton pada GroupBox
Ikon, event handler terkait akan
menetapkan tipeIkon menjadi nilai tertentu (baris 51-83).
Event handler Click untuk tampilButton (baris 86-120) menciptakan sebuah MessageBox (baris 90-93). Opsi-opsi MessageBox ditetapkan dengan nilai-nilai yang disimpan pada tipeIkon dan tipeTombol. Ketika pengguna mengklik salah satu dari tombol-tombol
pada MessageBox, hasil dari kotak
teks itu diberikan kepada aplikasi. Hasil ini merupakan sebuah nilai dari
enumerasi DialogResult yang memuat Abort, Cancel, Ignore, No, None, OK, Retry, atau Yes. Statemen switch
pada baris 96-119 menguji hasil tersebut dan menetapkan tampilLabel.Text sesuai hasil yang diperoleh.
1.8
PictureBox
PictureBox menampilkan sebuah citra. Citra bisa dalam beberapa format, seperti bitmap,
GIF, dan JPEG. Properti Image pada PictureBox menetapkan citra yang akan
ditampilkan, dan properti SizeMode
mengindikasikan bagaimana citra ditampilkan (Normal, StretchImage, Autosize, CenterImage, atau Zoom).
Gambar 1.29 menjelaskan beberapa properti pada kelas PictureBox dan sebuah eventnya.
Properti dan event pada
PictureBox
|
Penjelasan
|
Properti-properti
|
|
Image
|
Menetapkan
citra yang akan ditampilkan pada PictureBox.
|
SizeMode
|
Enumerasi yang mengendalikan
pemosisian dan ukuran citra. Nilai-nilainya adalah Normal (default), StretchImage,
AutoSize, CenterImage, dan Zoom.
Nilai Normal menempatkan citra
pada pojok kiri-atas PictureBox,
dan CenterImage menempatkan citra
di tengah. Kedua opsi ini memotong citra jika ia terlalu besar. Nilai StretchImage mengubah ukuran citra
sehingga bisa ditempatkan pada PictureBox.
Nilai AutoSize mengubah ukuran PictureBox agar dapat memuat citra.
Nilai Zoom mengubah ukuran citra
agar dapat dimuat pada PictureBox
tetapi tetap mempertahankan rasio awalnya.
|
Event
|
|
Click
|
Terjadi
ketika pengguna mengklik sebuah kendali. Ketika Anda mengklik ganda kendali
ini pada designer view, sebuah event handler dibangkitkan untuk event ini.
|
Gambar
1.29 Beberapa properti dan
event pada kelas PictureBox
Gambar 1.30 menggunakan sebuah PictureBox yang dinamai dengan citraPictureBox untuk menampilkan satu
dari tiga citra bitmap, yaitu citra0.bmp,
citra1.bmp, dan citra2.bmp. Ketiga citra ini bisa Anda sediakan sendiri. Kapanpun
pengguna mengklik tombol Citra
Berikutnya, citra akan beralih ke citra berikutnya. Ketika citra terakhir
telah ditampilkan dan pengguna mengklik tombol Citra Berikutnya, citra pertama akan ditampilkan kembali.
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
|
//
Gambar 1.30: UjiPictureBoxForm.cs
//
Menggunakan sebuah PictureBox untuk menampilkan citra.
using
System;
using
System.Drawing;
using
System.Windows.Forms;
namespace
UjiPictureBox
{
// Form untuk menimpalkan citra-citra
ketika PictureBox diklik
public
partial class UjiPictureBoxForm : Form
{
private
int nomorCitra = -1; // menentukan citra mana yang ditampilkan
// konstruktor default
public
UjiPictureBoxForm()
{
InitializeComponent();
} // akhir konstruktor default
// mengubah citra kapanpun tombol
Citra Berikutnya diklik
private
void berikutnyaButton_Click(object sender, EventArgs e)
{
nomorCitra = (nomorCitra + 1) %
3; // nomorCitra dari 0 sampai 2
// membaca citra dari
resources dan memuatnya ke dalam PictureBox
citraPictureBox.Image = ( Image )
(
Properties.Resources.ResourceManager.GetObject(
string.Format(
"citra{0}", nomorCitra )
) );
} // akhir metode
berikutnyaButton_Click
} // akhir kelas UjiPictureBoxForm
} //
akhir UjiPictureBox
|
Menggunakan Resources
Pada contoh ini, Anda menambahkan
beberapa citra pada projek sebagai sumberdayanya. Ini menyebabkan kompiler
untuk menanamkan citra-citra pada file aplikasi dan memampukan aplikasi
tersebut mengakses citra-citra melalui namespace
Properties. Dengan menanamkan
citra-citra ke dalam aplikasi, Anda tidak perlu khawatir tentang bagaimana
melibatkan citra-citra tersebut dengan aplikasi tertentu ketika Anda
memindahkanya ke lokasi lain atau ke komputer lain.
Jika Anda menciptakan sebuah projek
baru, Anda menggunakan beberapa langkah berikut untuk menambahkan citra-citra
ke projek sebagai sumberdaya:
1.
Setelah menciptakan projek Anda, Anda mengklik kanan simpul Properties pada Solution Explorer dan
memilih Open untuk menampilkan
properti-properti projek.
2.
Dari tab-tab di sisi kiri, Anda mengklik tab Resources.
3.
Di sisi atas tab Resources,
Anda mengklik tanda panah bawah yang ada di samping Add Resource dan memilih
Add Existing File.
4.
Mencari lokasi citra-citra yang akan Anda tambahkan sebagai sumberdaya.
5. Simpan projek Anda.
File-file tersebut sekarang berada pada
sebuah folder bernama Resources pada
Solution Explorer. Teknik ini
digunakan pada hampir semua contoh yang menggunakan citra pada buku ini.
Untuk mengakses sebuah citra, Anda
dapat menggunakan metode GetObject,
yang mengambil nama sumberdaya sebuah argumen dan menghasilkan sebuah Object. Baris 27-28 memanggil GetObject dengan hasil dari ekspresi
string.Format( "citra{0}",
nomorCitra )
yang membangun nama sumberdaya dengan
menempatkan indeks dari citra berikutnya (nomorCitra,
yang didapatkan pada baris 23) di sisi akhir kata “citra”. Anda harus mengkonversi Object ini menjadi tipe Image
(namespace System.Drawing) untuk menugaskannya kepada properti Image pada PictureBox (baris 26).
Kelas Resources menyediakan akses langsung terhadap sumberdaya yang Anda
definisikan dengan ekspresi-ekspresi dalam format Resources.namaSumberdaya, dimana namaSumberdaya adalah nama yang Anda sediakan untuk sumberdaya
ketika Anda menciptakannya. Ketika menggunakan ekspresi semacam itu, sumberdaya
yang dihasilkan telah memiliki tipe yang sesuai. Sebagai contoh, Properties.Resources.citra0 merupakan
sebuah objek Image yang
merepresentasikan citra pertama.
1.9
ToolTip
Bagian ini akan membahas bagaimana
menggunakan komponen ToolTip untuk
menambahkan tool tip pada aplikasi
Anda. Tool tip merupakan teks
pembantu yang muncul ketika mouse
berada di sebuah item pada sebuah GUI. Ingat bahwa toop tip ditampilkan pada Visual Studio membantu Anda agar menjadi
familiar dengan fitur-fitur IDE dan berperan sebagai pengingat untuk
fungsionalitas tiap ikon toolbar.
Gambar 1.31 mendeskripsikan beberapa properti dan sebuah event dari kelas ToolTip.
Ketika Anda menambahkan sebuah komponen
ToolTip dari Toolbox, ia muncul di dalam component
tray, sebuah region abu-abu di bawah Form
pada mode Design. Begitu sebuah ToolTip ditambahkan pada Form, suatu properti baru muncul pada
jendela Properties untuk
kendali-kendali lain pada Form.
Properti ini muncul pada jendela Properties
sebagai ToolTip on, diikuti dengan
nama dari komponen ToolTip.
Properti dan event pada
ToolTip
|
Penjelasan
|
Properti-properti
|
|
AutoPopDelay
|
Jumlah
waktu (dalam milidetik) yang dipakai untuk menetapkan lamanya tool tip muncul ketika mouse berada di
atas sebuah kendali.
|
InitialDelay
|
Jumlah
waktu (dalam milidetik) yang diperlukan sebuah mouse untuk berada di atas
sebuah kendali sebelum tool tip
muncul.
|
ReshowDelay
|
Jumlah
waktu (dalam milidetik) antara kemunculan dua tool tip yang berbeda (ketika mouse dipindahkan dari satu kendali
ke kendali lain).
|
Event
|
|
Draw
|
Dipicu
ketik tool tip ditampilkan. Event ini memampukan programer untuk
memodifikasi kemunculan tool tip.
|
Gambar 1.31 Beberapa properti dan event pada kelas ToolTip
Gambar 1.32 Mendemonstrasikan komponen ToolTip
Sebagai contoh, jika ToolTip Anda dinamai dengan bergunaToolTip, maka Anda akan
menetapkan nilai properti ToolTip on
bergunaToolTip pada sebuah kendali untuk menciptakan teks tool tip pada kendali itu. Gambar 1.32
mendemonstrasikan komponen ToolTip.
Untuk contoh ini, Anda menciptakan sebuah GUI yang memuat dua Label, sehingga Anda dapat
mendemonstrasikan teks tool tip
berbeda untuk tiap Label. Karena
tidak ada kode penanganan-event pada
contoh ini, kode untuk kelas Form
tidak perlu ditampilkan.
Gambar 1.33
Mendemonstrasikan component tray
Pada contoh ini, Anda menamai komponen ToolTip dengan bergunaToolTip. Gambar 1.33 menampilkan ToolTip pada component tray.
Anda menetapkan teks tool tip untuk Label pertama menjadi “Label Pertama” dan teks tool tip
untuk Label kedua menjadi “Label kedua”. Gambar 1.34
mendemonstrasikan pengaturan teks tool
tip untuk Label pertama.
Gambar 1.34 Pengaturan teks tool tip pada sebuah kendali
1.10
Kendali NumericUpDown
Ada kalanya, Anda ingin membatasi
pilihan-pilihan masukan pengguna hanya berupa nilai-nilai numerik. Ini
merupakan tujuan dari kendali NumericUpDown.
Kendali ini muncul sebagai sebuah TextBox,
dengan dua Button kecil di sisi
kanan, satu dengan anak panah atas dan satu lagi dengan anak panah bawah.
Secara default, pengguna dapat mengetikkan nilai-nilai numerik ke dalam kendali
ini seperti sebuah TextBox atau
pengguna bisa mengklik kedua anak panah untuk menjelajah nilai-nilai pada
kendali. Nilai terbesar dan nilai terkecil di dalam rentang ditetapkan dengan
properti Maximum dan Minimum (keduanya bertipe decimal). Properti Increment (juga bertipe decimal)
menetapkan berapa banyak nilai terkini berubah ketika pengguna mengkli anak
panah. Properti DecimalPlaces
menetapkan jumlah dijit desimal yang ditampilkan kendali. Gambar 1.35
menjelaskan beberapa properti dan sebuah event
dari kelas NumericUpDown.
Properti dan event pada
NumericUpDown
|
Penjelasan
|
Properti-properti
|
|
Maximum
|
Nilai
terbesar di dalam rentang pada kendali.
|
Minimum
|
Nilai
terkecil di dalam rentang pada kendali.
|
UpDownAlign
|
Memodifikasi penyejajaran Button panah atas dan Button panah bawah pada kendali NumericUpDown. Properti ini dapat
dipakai untuk menampilkan kedua Button
ini di sisi kanan atau di sisi kiri kendali.
|
Value
|
Nilai numerik yang sedang ditampilkan
pada kendali.
|
Event
|
|
ValueChanged
|
Event ini dipicu ketika
nilai pada kendali berubah. Ini merupakan event
default untuk kendali NumericUpDown.
|
Gambar
1.35 Beberapa properti dan
event pada kelas NumericUpDown
Gambar 1.36 mendemonstrasikan sebuah
kendali NumericUpDown pada suatu GUI
yang menghitung suku bunga. Dua TextBox
dipakai untuk memasukkan nilai investasi awal dan suku bunga, dan sebuah
kendali NumericUpDown dipakai untuk
memasukkan jumlah tahun.
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
|
// Gambar 1.36: KalkulatorBungaForm.cs
// Mendemonstrasikan kendali
NumericUpDown.
using System;
using
System.Windows.Forms;
namespace KalkulatorBunga
{
public partial class
KalkulatorBungaForm : Form
{
// konstruktor default
public
KalkulatorBungaForm()
{
InitializeComponent();
} // akhir konstruktor default
private void hitungButton_Click(
object sender, EventArgs e)
{
// mendeklarasikan variabel-variabel untuk menyimpan masukan pengguna
decimal investasi; // menyimpan investasi
double bunga; // menyimpan suku bunga
int tahun; // menyimpan jumlah tahun
decimal jumlah; // menyimpan jumlah
string keluaran; // menyimpan keluaran
// membaca masukan pengguna
investasi = Convert.ToDecimal(
investasiTextBox.Text );
bunga = Convert.ToDouble(
bungaTextBox.Text );
tahun = Convert.ToInt32(
tahunUpDown.Value );
// menetapkan header keluaran
keluaran = "Tahun\tJumlah pada Deposit\r\n";
// menghitung jumlah uang tiap
tahun dan menambahkan pada
for ( int hitungTahun
= 1; hitungTahun <= tahun; hitungTahun++ )
{
jumlah = investasi * ( ( decimal )
Math.Pow( ( 1 + bunga /
100 ), hitungTahun ) );
keluaran += ( hitungTahun +
"\t" +
string.Format( "Rp. {0}", jumlah ) + "\r\n" );
} // akhir for
tampilTextBox.Text = keluaran; //
menampilkan hasil
} // akhir metode hitungButton_Click
} // akhir kelas KalkulatorBungaForm
} // akhir namespace KalkulatorBunga
|
Untuk kendali NumericUpDown yang dinamai tahunUpDown,
Anda menetapkan properti Minimum
menjadi 1 dan properti Maximum
menjadi 200. Anda membiarkan properti Increment
tetap 1, nilai defaultnya. Pengaturan ini membuat pengguna dapat memasukkan
jumlah tahun dalam rentang 1 sampai 200 dengan inkremen sebesar 1. Jika Anda
menetapkan Increment menjadi 0.5,
Anda menetapkan properti ReadOnly
pada kendali NumericUpDown menjadi true untuk mengindikasikan bahwa
pengguna tidak dapat mengetikkan sebuah angka pada kendali untuk membuat
pilihan. Jadi, pengguna harus mengklik panah bawah dan panah atas untuk
memodifikasi nilai pada kendali. Secara default, properti ReadOnly ditetapkan menjadi false,
tetapi IDE mengubah ini menjadi true
ketika Anda menggeretnya ke Form.
Keluaran aplikasi ini ditampilkan pada sebuah TextBox read-only baris jamak dengan batang penggeser
vertikal, sehingga pengguna dapat menggeser batang untuk melihat keseluruhan
keluaran.
1.11
Penanganan Mouse-Event
Bagian ini menjelaskan bagaimana
menangani event mouse, yang
dibangkitkan ketika pengguna berinteraksi dengan sebuah kendali melalui mouse. Event mouse dapat ditangani untuk
sembarang kendali yang mewarisi kelas System.Windowns.Forms.Control.
Untuk hampir semua event mouse,
informasi seputar event dilewatkan
kepada metode penanganan-event
melalui sebuah objek dari kelas MouseEventArgs,
dan delegate yang dipakai untuk
menciptakan metode yang menangani event
mouse adalah MouseEventHandler.
Setiap metode yang menangani event
mouse memerlukan sebuah object dan
sebuah objek MouseEventArgs sebagai
argumennya.
Kelas MouseEventArgs memuat informasi yang berkaitan dengan event mouse, seperti koordinat x dan koordinat y dari pointer mouse, tombol mouse yang ditekan (Right, Left atau Middle), dan
jumlah berapa kali mouse diklik. Koordinat x
dan y dari objek MouseEventArgs merupakan koordinat yang relatif terhadap kendali
yang memicu event. Misalnya, titik
(0, 0) merepresentasikan pojok kiri-atas dari kendali dimana event mouse terjadi. Beberapa event mouse dan argumen event dijelaskan pada Gambar 1.37.
Event mouse dan argumen
eventnya
|
Penjelasan
|
Event mouse dengan argumen event bertipe
EventArgs
|
|
MouseEnter
|
Terjadi ketika kursor mouse memasuki
batas-batas sebuah kendali.
|
MouseHover
|
Terjadi ketika kursor mouse berada di
dalam batas-batas sebuah kendali.
|
MouseLeave
|
Terjadi ketika kursor mouse
meninggalkan batas-batas sebuah kendali.
|
Event mouse dengan argumen event bertipe
MouseEventArgs
|
|
MouseDown
|
Terjadi ketika tombol mouse ditekan
pada saat kursor berada di dalam batas-batas sebuah kendali.
|
MouseMove
|
Terjadi ketika kursor mouse
digerakkan atau digeser pada saat kursor berada di dalam batas-batas sebuah
kendali.
|
MouseUp
|
Terjadi ketika tombol mouse
dilepaskan pada saat kursor berada di dalam batas-batas sebuah kendali.
|
Properti-properti kelas MouseEventArgs
|
|
Button
|
Menetapkan tombol mana yang ditekan (Right, Left atau Middle).
|
Clicks
|
Jumlah berapa kali tombol mouse
ditekan.
|
X
|
Koordinat y pada kendali dimana event
terjadi.
|
Y
|
Koordinat x pada kendali dimana event
terjadi.
|
Gambar
1.37 Beberapa event mouse dan argumen event
Gambar 1.38 menggunakan beberapa event mouse untuk menggambar pada suatu Form. Kapanpun pengguna menggeret mouse
(memindahkan mouse saat sebuah tombol mouse ditekan), lingkaran kecil akan
muncul pada Form pada posisi dimana
tiap event mouse terjadi selama
operasi penggeretan.
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
|
// Gambar 1.38: PainterForm.cs
// Menggunakan mouse untuk menggambar
pada sebuah Form.
using System;
using System.Drawing;
using
System.Windows.Forms;
namespace UjiPainter
{
// menciptakan sebuah Form yang menjadi tempat gambar
public partial class
PainterForm : Form
{
bool harusGambar = false; // menentukan apakah menggambar atau tidak
// konstruktor default
public PainterForm()
{
InitializeComponent();
} // akhir konstruktor default
// menggambar ketika tombol mouse ditekan
private void PainterForm_MouseDown(
object sender, MouseEventArgs e)
{
//
mengindikasikan bahwa pengguna menggeret mouse
harusGambar
= true;
} // akhir metode PainterForm_MouseDown
// menggambar ketika tombol mouse dilepaskan
private void PainterForm_MouseUp(object sender, MouseEventArgs e)
{
// mengindikasikan bahwa
pengguna melepaskan tombol mouse
harusGambar = false;
} // akhir metode PainterForm_MouseUp
// menggambar lingkaran kapanpun mouse bergeser ketika tombolnya
ditekan
private void PainterForm_MouseMove(
object sender, MouseEventArgs e)
{
if (harusGambar) // jika tombol
mouse ditekan
{
// menggambar
sebuah lingkaran dimana pointer mouse berada
using
(Graphics grafik = CreateGraphics())
{
grafik.FillEllipse(
new SolidBrush(Color.BlueViolet), e.X, e.Y, 4, 4);
} // akhir using; memanggil
grafik.Dispose()
} // akhir
if
} // akhir metode PainterForm_MouseMove
} // akhir kelas PainterForm
} // akhir namespace UjiPainter
|
Pada baris 12, program mendeklarasikan
variabal harusGambar, yang
menentukan apakah menggambar pada Form
atau tidak. Anda ingin agar program menggambar hanya ketika tombol mouse
ditekan. Jadi, ketika pengguna mengklik atau menekan ke bawah sebuah tombol
mouse, sistem akan membangkitkan sebuah event
MouseDown, dan event handler (baris 21-26) menetapkan harusGambar menjadi true.
Ketika pengguna melepaskan tombol mouse, sistem memicu event MouseUp, dan harusGambar ditetapkan menjadi false pada event handler PainterForm_MouseUp
(baris 29-33) kemudian program berhenti menggambar. Tidak seperti event MouseMove, yang terjadi secara kontinyu ketika pengguna memindahkan
mouse, sistem memicu event MouseDown hanya ketika sebuah tombol
mouse ditekan dan memicu event MouseUp hanya ketika sebuah tombol
mouse dilepaskan.
Kapanpun mouse bergeser di atas sebuah
kendali, event MouseMove untuk kendali itu akan terjadi. Di dalam event handler PainterForm_MouseMove (baris 36-48), program menggambar hanya jika harusGambar bernilai true (yaitu, sebuah tombol mouse
ditekan). Pada statemen using, baris
42 memanggil metode CreatGraphics
untuk menciptakan sebuah objek Graphics
yang memampukan sebuah program untuk menggambar pada Form. Kelas Graphics
menyediakan beberapa metode yang dapat menggambar pelbagai bangun. Sebagai
contoh, baris 44-45 menggunakan metode FillEllipse
untuk menggambar sebuah lingkaran. Parameter pertama pada metode FillEllipse pada kasus ini adalah
sebuah objek dari kelas SolidBrush,
yang menetapkan warna yang akan mengisi bangun. Warna itu disediakan sebagai
sebuah argumen kepada konstruktor kelas SolidBrush.
Tipe Color memuat beberapa konstanta
warna terdefinisi, pada kasus ini Anda memilih Color.BlueViolet.
1.12
Penanganan Keyboard-Event
Event kunci terjadi ketika kunci-kunci
papanketik ditekan dan dilepaskan. Event
–event semacam ini dapat ditangani
untuk semua kendali yang mewarisi System.Windows.Forms.Control.
Ada tiga event kunci, KeyPress, KeyUp, dan KeyDown. Event KeyPress terjadi ketika pengguna menekan sebuah kunci yang
merepresentasikan karakter ASCII. Kunci tersebut dapat ditentukan dengan
properti KeyChar dari argumen KeyPressEventArgs pada event handler.
Event KeyPress
tidak mengindikasikan apakah kunci-kunci pemodifikasi (Shift, Alt, dan Ctrl)
ditekan ketika event kunci terjadi.
Jika informasi ini penting, event KeyUp atau KeyDown dapat dipakai. Argumen KeyEventArgs
untuk tiap event ini memuat informasi
tentang kunci-kunci pemodifikasi. Gambar 1.39 mencantumkan informasi beberapa event kunci. Beberapa properti
menghasilkan nilai-nilai dari enumerasi Keys
(memuat konstanta-konstanta yang menetapkan pelbagai kunci pada papanketik).
Event kunci dan argumen
eventnya
|
Penjelasan
|
Event kunci dengan argumen event bertipe
KeyEventArgs
|
|
KeyDown
|
Dipicu ketika sebuah kunci awalnya
ditekan.
|
KeyDown
|
Dipicu ketika sebuah kunci
dilepaskan.
|
Event kunci dengan argumen event bertipe
KeyPressEventArgs
|
|
KeyPress
|
Dipicu ketika sebuah kunci ditekan.
Dibangkitkan setelah event KeyDown dan sebelum event KeyUp.
|
Properti kelas KeyPressEventArgs
|
|
KeyChar
|
Menghasilkan
karakter ASCII untuk kunci yang ditekan.
|
Properti-properti kelas KeyEventArgs
|
|
Alt
|
Mengindikasikan apakah kunci Alt
ditekan.
|
Control
|
Mengindikasikan apakah kunci Ctrl
ditekan.
|
Shift
|
Mengindikasikan apakah kunci Shift
ditekan.
|
KeyCode
|
Menghasilkan kode kunci untuk kunci
sebagai suatu nilai dari enumerasi Keys.
Ini tidak mencakup informasi pemodifikasi kunci. Dipakai untuk menguji kunci
tertentu.
|
KeyData
|
Menghasilkan kode kunci untuk sebuah
kunci yang dikombinasikan dengan informasi pemodifikasi sebagai nilai Keys. Properti ini memuat semua
informasi tentang kunci yang ditekan.
|
KeyValue
|
Menghasilkan kode kunci sebagai
sebuah int, bukan sebuah nilai
dari enumerasi Keys. Properti ini
dipakai untuk mendapatkan representasi numerik atas kunci yang ditekan. Nilai
int dikenal sebagai kode kunci
virtual Windows.
|
Modifiers
|
Menghasilkan sebuah nilai Keys yang
mengindikasikan sembarang kunci pemodifikasi yang ditekan (Alt, Ctrl, dan
Shift). Properti ini dipakai untuk menentukan informasi kunci pemodifikasi.
|
Gambar
1.39 Beberapa event kunci dan argumen event
Gambar 1.40 mendemonstrasikan
penggunaan beberapa event handler untuk
event kunci. Program merupakan sebuah
Form dengan dua Label yang menampilkan kunci yang ditekan pada satu Label dan informasi kunci pemodifikasi
pada Label lain.
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
|
//
Gambar 1.40: DemoKunci.cs
//
Menampilkan informasi tentang kunci yang ditekan pengguna.
using
System;
using
System.Windows.Forms;
namespace
DemoKunci
{
// Form untuk menampilkan informasi kunci
ketika ditekan
public
partial class DemoKunciForm : Form
{
//konstruktor default
public
DemoKunciForm()
{
InitializeComponent();
} // akhir konstruktor default
// menampilkan karakter yang ditekan
menggunakan KeyChar
private
void DemoKunci_KeyPress(
object sender, KeyPressEventArgs e)
{
charLabel.Text = "Kunci ditekan: " + e.KeyChar;
} // akhir metode DemoKunci_KeyPress
// menampilkan
kunci pemodifikasi, kode kunci, data kunci, dan nilai kunci
private
void DemoKunci_KeyDown(object
sender, KeyEventArgs e)
{
infoKunciLabel.Text =
"Alt: " + ( e.Alt ? "Ya" : "Tidak"
) + '\n' +
"Shift: " + ( e.Shift ? "Ya" : "Tidak"
) + '\n' +
"Ctrl: " + ( e.Control ? "Ya" : "Tidak"
) + '\n' +
"KeyCode: " + e.KeyCode + '\n' +
"KeyData: " + e.KeyData + '\n' +
"KeyValue: " + e.KeyValue;
} // akhir metode DemoKunci_KeyDown
// menghapus Label-Label ketika kunci
ditekan
private
void DemoKunci_KeyUp(object sender, KeyEventArgs e)
{
charLabel.Text = "";
infoKunciLabel.Text =
"";
} // akhir metode DemoKunci_KeyUp
} // akhir kelas DemoKunciForm
} //
akhir namespace DemoKunci
|
Kendali charLabel menampilkan nilai karakter dari kunci yang ditekan,
sedangkan infoKunciLabel menampilkan
informasi yang berkaitan dengan kunci yang ditekan. Karena event KeyDown dan event KeyUp menyampaikan informasi yang berbeda, Form ini menangani keduanya.
Event handler KeyPress
(baris 18-22) mengakses properti KeyChar
dari objek KeyPressEventArgs. Ini
menghasilkan kunci yang ditekan sebagai sebuah char, dimana Anda kemudian menampilkannya pada charLabel (baris 21). Jika kunci yang ditekan bukan sebuah karakter
ASCII, maka event KeyPress tidak akan terjadi, dan charLabel tidak akan menampilkan teks
apapun.
Event handler KeyDown
(baris 25-34) menampilkan informasi dari objek KeyEventArgs. Event handler ini menguji untuk kunci Alt,
Shift, dan Ctrl menggunakan properti Alt,
Shift, dan Control, dimana tiap properti ini menghasilkan sebuah nilai bool (true jika kunci pemodifikasi ditekan dan false jika sebaliknya). Event
handler kemudian menampilkan nilai dari properti KeyCode, KeyData, dan KeyValue.
Properti KeyCode menghasilkan sebuah nilai enumerasi Keys (baris 31). Properti KeyCode
menghasilkan kunci yang ditekan, tetapi tidak menyediakan informasi tentang
kunci pemodifikasi. Jadi, huruf besar A dan huruf kecil a keduanya
direpresentasikan sebagai kunci A.
Properti KeyData (baris 32) juga menghasilkan sebuah nilai enumerasi Keys, tetapi properti ini memuat data
tentang kunci-kundi pemodifikasi. Jadi, jika “A” dan kunci pemodifikasi Ctrl keduanya ditekan bersamaan, KeyData akan menampilkan kunci A dan
kunci Ctrl.
Properti KeyValue (baris 33) menghasilkan sebuah int yang merepresentasikan kunci yang ditekan. Nilai int ini merupakan kode kunci. Kode
kunci berguna ketika Anda menguji kunci-kunci tak-ASCII seperti F12.
No comments:
Post a Comment