Sunday, December 25, 2016

Bab 1. Visual C# Untuk Programer



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 RadioButtonRadioButton 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. Eventevent 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