Sunday, December 25, 2016

Bab 9. Visual C# Untuk Programer



Lanjut dengan Windows Forms






9.1 Pengantar

Bab ini akan dilanjutkan untuk mempelajari GUI. Akan dimuali dengan menu, yang menyajikan opsi-opsi terorganisir kepada pengguna. Di sini akan ditunjukkan bagaimana mengembangkan menu-menu dengan perangkat-perangkat yang disediakan oleh Visual Studio. Selanjutnya, Anda didiskusikan bagaimana membaca dan menampilkan tanggal dan waktu menggunakan kendali MonthCalendar dan DateTimePicker. Komponen GUI, LinkLabel, juga akan diintroduksi untuk memampukan pengguna dalam mengakses salah satu dari beberapa destinasi, seperti file atau situs web.

Akan didemonstrasikan pula bagaimana memanipulasi sebuah daftar nilai melalui suatu ListBox dan bagaimana mengkomboinasikan beberapa kotak periksa di dalam sebuah CheckedListBox. Akan diciptakan sebuah daftar drop-down menggunakan ComboBox dan menampilkan data secara hierarkis menggunakan kendali TreeView.


9.2 Menu
Menu menyediakan grup-grup perintah (opsi) yang berelasi pada aplikasi-aplikasi Windows. Meskipun perintah-perintah ini bervariasi tergantung dari program, tetapi beberapa di antaranya, seperti Open dan Save, umum dijumpai pada banyak aplikasi. Menu merupakan bagian integral dari GUI, karena ia mengorganisir perintah-perintah tanpa membuat GUI “berantakan”.


Gambar 9.1 Menu, submenu, dan item-item menu


Pada Gambar 9.1, ditunjukkan pelbagai perintah (dikenal pula dengan item-item menu), dengan submenu (menu di dalam sebuah menu) pada IDE Visual Studio. Menu level-atas tampil di bagian sisi kiri gambar, sedangkan submenu ditampilkan di sisi kanan. Menu yang memuat sebuah item menu disebut dengan menu induk dari item menu itu. Item menu yang memuat sebuah submenu dipandang sebagai induk dari submenu tersebut.

Menu dapat memiliki kunci pintas (shortcut) Alt, yang diakses dengan menekan Alt dan huruf tergaris-bawah. Sebagai contoh, Alt F umumnya untuk mengekspansi menu File. Item-item menu juga dapat memiliki kunci pintas (kombinasi-kombinasi dari Ctrl, Shift, Alt, F1, F2, kunci-kunci huruf, dan seterusnya).  Beberapa item menu menampilkan tanda periksa (tanda centang), yang biasanya menandakan bahwa lebih dari satu opsi pada menu tersebut dapat diseleksi sekaligus.


Gambar 9.2 Mengedit menu pada Visual Studio


Untuk menciptakan sebuah menu, Anda membukan Toolbox dan menggeret sebuah kendali MenuStrip ke Form. Ini akan menciptakan sebuah batang menu di atas Form (di bawah judul batang) dan menempatkan sebuah ikon MenuStrip pada component tray. Untuk memilih MenuStrip, Anda mengklik ikon ini. Anda sekarang dapat menggunakan mode Design untuk menciptakan dan mengedit menu-menu untuk aplikasi Anda. Menu, seperti kendali lainnya, memiliki properti dan event, yang dapat diakses melalui jendela Properties.

Untuk menambahkan item-item pada menu, Anda mengklik Text Box Type Here (Gambar 9.2) dan mengetikkan nama item menu. Tindakan ini akan menambahkan sebuah entri  pada menu dengan tipe ToolStripMenuItem.

Setelah Anda menekan kunci Enter, nama item menu akan ditambahkan pada menu. Kemudian TextBox Type Here lain muncul, agar Anda bisa menambahkan item-item di bawah atau di samping item menu awal (Gambar 9.3).


Gambar 9.3 Menambahkan ToolStripMenuItem pada MenuStrip


Untuk menciptakan sebuah akses pintas, Anda mengetikkan tanda & di depan karakter yang akan digaris-bawahi. Sebagai contoh, item menu File dengan huruf F digaris-bawahi, ketikkan &File. Untuk menampilkan sebuah ampersand, Anda mengetikkan &&. Untuk menambahkan kunci pintas lain (misalnya, <Ctrl> F9) untuk item-item menu, Anda menetapkan properti ShortcutKeys dari ToolStripMenu tertentu. Untuk melakukannya, Anda memilih panah bawah di sebelah kanan properti ini pada jendela Properties. Pada jendela yang muncul (Gambar 9.4), Anda menggunakan CheckBox dan daftar drop-down untuk memilih kunci pintas. Ketika selesai, Anda mengklik di suatu tempat pada layar. Anda dapat menyembunyikan kunci pintas dengan mengatur properti ShowShortcutKeys menjadi false, dan Anda dapat memodifikasi bagaimana kunci pintas ditampilkan pada item menu dengan memodifikasi properti ShortcutKeyDisplayString.


Gambar 9.4 Memilih kunci pintas untuk item menu


Anda dapat menghapus sebuah item menu dengan memilihnya menggunakan mouse dan menekan kunci Delete. Item menu dapat dikelompokkan dengan batang pemisah (separator bar), yang disisipkan dengan klik kanan pada menu dan memilih Insert > Separator atau dengan mengetikkan “-“ pada teks dari sebuah item menu.

Selain teks, Visual Studio juga memampukan Anda untuk dengan mudah menambahkan TextBox dan ComboBox (daftar drop-down) sebagai item menu. Ketika menambahkan sebuah item pada mode Design, Anda dapat menyadari bahwa sebelum Anda memasukkan teks untuk item baru, pada Anda disediakan sebuah daftar drop-down. Anda bisa mengklik panah bawah (Gambar 9.5) yang memampukan Anda untuk memilih tipe item yang akan ditambahkan, yaitu MenuItem (dengan tipe ToolStripMenuItem, default), ComboBox (dengan tipe ToolStripComboBox), dan TextBox (dengan tipe ToolStripTextBox). Untuk sementara ini, Anda hanya fokus pada ToolStripMenuItem saja.

ToolStripMenuItem memicu sebuah event Click ketika diseleksi. Untuk menciptakan sebuah event handler Click kosong, Anda mengklik ganda sebuah item menu pada mode Design. Beberapa aksi dalam merespon event ini mencakup menampilkan dialog dan menetapkan properti-properti. Beberapa properti item dan sebuah event dicantumkan pada Gambar 9.6.


Gambar 9.5 Opsi-opsi item menu


Properti dan event pada  kelas MenuStrip dan MenuStripMenuItem
Penjelasan
Properti MenuStrip
RightToLeft
Menyebabkan teks ditampilkan dari kanan ke kiri. Ini berguna untuk bahasa-bahasa yang dibaca dari kanan ke kiri.

Properti-properti MenuStripMenuItem
Checked
Mengindikasikan apakah sebuah item menu dicentang. Nilai defaultnya adalah false, yang berarti bahwa item menu tidak dicentang.

CheckOnClick
Mengindikasikan bahwa sebuah item menu harus muncul dicentang atau tidak dicentang ketika ia diseleksi.

ShortcutKey-
DisplayString
Menetapkan teks yang akan ditampilkan di samping sebuah item menu untuk kunci pintas. Jika kosong, nama kunci ditampilkan. Sebaliknya, teks pada properti ini ditampilkan untuk kunci pintas.

ShortcutKeys
Menetapkan kunci pintas untuk item menu (misalnya, <Ctrl> F9 ekivalen dengan pengklikan terhadap item tertentu).

ShowShortcutKeys
Mengindikasikan apakah sebuah kunci pintas ditampilkan di samping teks item menu. Defaultnya adalah true, yang menampilkan kunci pintas.

Text
Menetapkan teks pada item menu. Untuk menciptakan kunci pintas Alt, sebuah karakter & ditempatkan di depan teks tersebut. Sebagai contoh, &File untuk menetapkan sebuah menu bernama File dengan karakter F digaris-bawahi.

Event pada ToolStripMenuItem
Click
Dipicu ketika sebuah item diklik atau sebuah kunci pintas digunakan. Ini merupakan event default ketika menu diklik ganda pada mode Design.


Gambar 9.6 Beberapa properti dan sebuah event dari kelas MenuStrip dan MenuStripMenuItem

Kelas UjiMenuFom (Gambar 9.7) menciptakan sebuah menu sederhana pada Form. Form memiliki menu level-atas File dengan item-item menu Tentang (yang menampilkan sebuah MessageBox) dan Keluar (yang menghentikan program). Program juga memuat sebuah menu Format, yang memuat item-item menu untuk mengubah teks pada sebuah Label. Menu Format memiliki submenu Warna dan Font, yang mengubah warna dan jenis huruf dari teks pada sebuah Label.


Menciptakan GUI
Untuk menciptakan GUI ini, Anda memulainya dengan menggeret MenuStrip dari Toolbox ke Form. Kemudian Anda menggunakan mode Design untuk menciptakan struktur menu seperti yang ditampilkan pada keluaran program. Menu File (fileToolStripMenuItem) memiliki item-item menu Tentang (tentangToolStripMenuItem) dan Keluar (keluarToolStripMenuItem.

Menu Format (formatToolStripMenuItem) memiliki dua submenu. Submenu pertama, Warna (warnaToolStripMenuItem), memuat item-item menu Hitam (hitamToolStripMenuItem), Biru (biruToolStripMenuItem), Merah (merahToolStripMenuItem), dan Hijau (hijauToolStripMenuItem). Submenu kedua, Huruf (hurufToolStripMenuItem), memuat Times New Roman (timesToolStripMenuItem), Courier (courierToolStripMenuItem), Comic Sans (comicToolStripMenuItem), sebuah batang pemisah (dashToolStripMenuItem), Tebal (tebalToolStripMenuItem), dan Miring (miringToolStripMenuItem).

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

namespace UjiMenu
{
    // Form ini memuat sebuah Menu yang mengubah warna dan gaya
    // huruf dari teks yang ditampilkan pada Label
    public partial class UjiMenuForm : Form
    {
        // konstruktor default
        public UjiMenuForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        // menampilkan MessageBox ketika ToolStripMenuItem Tentang dipilih
        private void tentangToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            MessageBox.Show( "Ini adalah sebuah contoh\ndari penggunaan menu.", "Tentang",
                MessageBoxButtons.OK, MessageBoxIcon.Information );
        } // akhir metode tentangToolStripMenuItem_Click

        // keluar program ketika  ToolStripMenuItem Keluar dipilih
        private void keluarToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            Application.Exit();
        } // akhir metode keluarToolStripMenuItem_Click

        // mereset semua centang untuk ToolStripMenuItem Warna
        private void HapusWarna()
        {
            // menghapus semua tanda periksa
hitamToolStripMenuItem.Checked = false;
biruToolStripMenuItem.Checked = false;
merahToolStripMenuItem.Checked = false;
hijauToolStripMenuItem.Checked = false;
        } // akhir metode HapusWarna

        // memperbarui keadaan Menu dan warna teks hitam
        private void hitamToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // menghapus semua tanda periksa untuk ToolStripMenuItem Warna
            HapusWarna();

            // menetapkan warna menjadi Black
            tampilLabel.ForeColor = Color.Black;
            hitamToolStripMenuItem.Checked = true;
        } // akhir metode hitamToolStripMenuItem_Click

        // memperbarui keadaan Menu dan warna teks biru
        private void biruToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // menghapus semua tanda periksa untuk ToolStripMenuItem Warna
            HapusWarna();

            // menetapkan warna menjadi Blue
            tampilLabel.ForeColor = Color.Blue;
            biruToolStripMenuItem.Checked = true;
        } // akhir metode biruToolStripMenuItem_Click

        // memperbarui keadaan Menu dan warna teks merah
        private void merahToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // menghapus semua tanda periksa untuk ToolStripMenuItem Warna
            HapusWarna();

            // menetapkan warna menjadi Red
            tampilLabel.ForeColor = Color.Red;
            merahToolStripMenuItem.Checked = true;
        } // akhir metode merahToolStripMenuItem_Click

        // memperbarui keadaan Menu dan warna teks hijau
        private void hijauToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // menghapus semua tanda periksa untuk ToolStripMenuItem Warna
            HapusWarna();

            // menetapkan warna menjadi Green
            tampilLabel.ForeColor = Color.Green;
            hijauToolStripMenuItem.Checked = true;
        } // akhir metode hijauToolStripMenuItem_Click

         // mereset tanda periksa untuk ToolStripMenuItem Font
        private void HapusFont()
        {
            // menghapus semua tanda periksa
timesToolStripMenuItem.Checked = false;
courierToolStripMenuItem.Checked = false;
comicToolStripMenuItem.Checked = false;
        } // akhir metode HapusFont

        // memperbarui keadaan Menu dan menetapkan Font menjadi Times New Roman
        private void timesToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // menghapus semua tanda periksa untuk ToolStripMenuItem Font
            HapusFont();

            // menetapkan huruf Times New Roman
            timesToolStripMenuItem.Checked = true;
            tampilLabel.Font = new Font( "Times New Roman", 14,
            tampilLabel.Font.Style);
        } // akhir metode timesToolStripMenuItem_Click

        // memperbarui keadaan Menu dan menetapkan Font menjadi Courier
        private void courierToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // menghapus semua tanda periksa untuk ToolStripMenuItem Font
            HapusFont();

            // menetapkan huruf Times New Roman
            courierToolStripMenuItem.Checked = true;
            tampilLabel.Font = new Font("Courier", 14,
            tampilLabel.Font.Style);
        } // akhir metode courierToolStripMenuItem_Click

        // memperbarui keadaan Menu dan menetapkan Font menjadi Comic Sans
        private void comicToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // menghapus semua tanda periksa untuk ToolStripMenuItem Font
            HapusFont();

            // menetapkan huruf Times New Roman
            comicToolStripMenuItem.Checked = true;
            tampilLabel.Font = new Font("Comic Sans MS", 14,
            tampilLabel.Font.Style);
        } // akhir metode comicToolStripMenuItem_Click

        // mentoggle tanda periksa dan mentoggle gaya tebal
        private void tebalToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // mentoggle tanda periksa
            tebalToolStripMenuItem.Checked = !tebalToolStripMenuItem.Checked;

            // menggunakan Xor untuk mentoggle tebal
            tampilLabel.Font = new Font( tampilLabel.Font,
            tampilLabel.Font.Style ^ FontStyle.Bold );
        } // akhir metode tebalToolStripMenuItem_Click

        // mentoggle tanda periksa dan mentoggle gaya miring
        private void miringToolStripMenuItem_Click(
            object sender, EventArgs e)
        {
            // mentoggle tanda periksa
            miringToolStripMenuItem.Checked =
                !miringToolStripMenuItem.Checked;

            // menggunakan Xor untuk mentoggle miring
            tampilLabel.Font = new Font(tampilLabel.Font,
            tampilLabel.Font.Style ^ FontStyle.Italic);
        } // akhir metode miringToolStripMenuItem_Click
    } // akhir kelas UjiMenuForm
} // akhir namespace UjiMenu




Menangani Event Click untuk Item Menu Tentang dan Keluar
Item menu Tentang pada menu File menampilkan sebuah MessageBox ketika diklik (baris 20-25). Item menu Keluar menutup aplikasi melalui metode static, Exit, dari kelas Application (baris 31). Metode-metode static dari kelas Application mengendalikan eksekusi program. Metode Exit menyebabkan aplikasi berhenti.

Event Submenu Warna
Anda menciptakan beberapa item pada submenu Warn (Hitam, Biru, Merah, dan Hijau), diman pengguna hanya dapat memilih satu submenu pada suatu waktu. Untuk mengindikasikan bahwa sebuah item menu diseleksi, Anda menetapkan properti Checked pada tiap item menu Warna menjadi true. Ini menyebabkan sebuah centang muncul di sisi kiri sebuah item menu.

Setiap item menu Warna masing-masing memiliki event handler Click. Event handler untuk warna Hitam adalah hitamToolStripMenuItem_Click (baris 45-54). Sama halnya, event handler untuk warna Biru, Merah, dan Hijau adalah biruToolStripMenuItem_Click (baris 57-66), merahToolStripMenuItem_Click (baris 69-78), dan hijauToolStripMenuItem_Click (baris 81-90). Setiap item menu Warna juga hanya dapat dipilih satu pada suatu waktu, jadi setiap event handler memanggil metode HapusWarna (baris 35-42) sebelum menetapkan properti Checked menjadi true. Metode HapusWarna menetapkan properti Checked dari tiap warna ToolStripMenuItem menjadi false, yang secara efektif mencegah lebih dari satu item menu diseleksi pada suatu waktu. Pada mode Design, Anda awalnya menetapkan properti Checked dari item menu Hitam menjadi true, karena pada awal program, teks pada Form adalah hitam.

Event Submenu Font
Menu Font memuat tiga item menu untuk jenis huruf Courier, Times New Roman, dan Comic Sans. Menu ini juga memuat dua item menu untuk gaya huruf, Hitam dan Miring. Anda menambahkan sebuah batang pemisah di antara item menu jenis huruf dan item menu gaya  huruf.

Event handler untuk item-item menu Font  Times New Roman, Courier, dan Comic Sans adalah timesToolStripMenuItem_Click (baris 102-112), courierToolStripMenuItem_Click (baris 115-125), dan comicToolStripMenuItem_Click (baris 128-138). Setiap event handler ini berperilaku sama seperti setiap event handler untuk item-item menu Warna. Setiap event handler menghapus properti Checked untuk semua item menu font dengan memanggil metode HapusFont (baris 93-99), kemudian menetapkan propertu Checked dari item menu yang memicu event tersebut menjadi true.


9.3 Kendali MonthCalendar
Banyak aplikasi perlu melakukan perhitungan tanggal dan waktu. .NET Framework menyediakan dua kendali yang memampukan sebuah aplikasi untuk mendapatkan informasi tanggal dan waktu, yaitu kendali MontCalendar dan DateTimePicker.

Kendali MonthCalendar (Gambar 9.8) menampilkan kalender bulanan pada Form. Pengguna dapat memilih sebuah tanggal dari bulan yang sedang ditampilkan. Ketika sebuah tanggal dipilih, ia akan disoroti. Banyak tanggal dapat diseleksi dengan mengklik tanggal-tanggal pada kalender sambil menahan kunci Shift. Event default untuk kendali ini adalah event DateChanged, yang dipicu ketika sebuah tanggal baru diseleksi. Properti-properti disediakan agar Anda dapat memodifikasi penampilan kalender, berapa banyak tanggal yang dapat diseleksi sekaligus, dan tanggal maksimum dan tanggal minimum yang bisa diseleksi. Properti-properti MonthCalendar dan sebuah eventnya dicantumkan pada Gambar 9.9.


Gambar 9.8 Kontrol MonthCalendar


Properti dan event pada  kelas MonthCalendar
Penjelasan
Properti-properti MonthCalendar
FirstDayOfWeek
Menetapkah hari dalam minggu yang pertama ditampilkan untuk tiap minggunya pada kalender.

MaxDate
Tanggal terakhir yang dapat diseleksi.

MaxSelectionCount
Jumlah maksimum dari tanggal yang dapat diseleksi sekaligus.

MinDate
Tanggal pertama yang dapat diseleksi.

MonthlyBoldedDates
Sebuah array yang memuat tanggal-tanggal yang akan ditampilkan pada kalender.

SelectionEnd
Tanggal terakhir yang dipilih oleh pengguna.

SelectionRange
Tanggal-tanggal yang dipilih oleh pengguna.

SelectionStart
Tanggal pertama yang dipilih oleh pengguna.

Event pada MonthCalendar
DateChanged
Dipicu ketika sebuah tanggal dipilih pada kelender.


Gambar 9.9 Beberapa properti dan sebuah event dari kelas MonthCalendar


9.4 Kendali DateTimePicker
Kendali DateTimePicker sama dengan kendali MonthCalendar kecuali bahwa ia menampilkan kalender ketika panah bawah diseleksi. Kendali DateTimePicker dapat dipakai untuk membaca informasi tanggal dan waktu dari pengguna. Properti Value dari DateTimePicker menyimpan sebuah objek DateTime, yang selalu memuat informasi tanggal dan waktu. Anda dapat membaca informasi tanggal dari objek DateTime menggunakan properti Date, dan Anda dapat membaca informasi waktu dengan menggunakan properti TimeOfDay.

Kendali DateTimePicker juga lebih kompleks daripada kendali MonthCalendar, dimana terdapat beberapa properti untuk mengedit penampilan kalender. Properti Format menetapkan opsi-opsi seleksi menggunakan enumerasi DateTimePickerFormat. Nilai-nilai pada enumerasi ini adalah Long (menampilkan tanggal dalam format panjang, seperti Saturday, January 11, 2014), Short (menampilkan tanggal dalam format pendek, seperti 1/11/2014), Time (menampilkan nilai waktu, seperti 5:31:03 PM), dan Custom (mengindikasikan bahwa format kustom akan digunakan). Jika format Custom digunakan, maka tampilan pada DateTimePicker ditetapkan menggunakan properti CustomFormat. Event default untuk kendali ini adalah ValueChanged, yang terjadi ketika nilai yang diseleksi (apakah tanggal atau waku) berubah. Properti-properti DateTimePicker dan sebuah eventnya dicantumkan pada Gambar 9.10.

Properti dan event pada  kelas DateTimePicker
Penjelasan
Properti-properti DateTimePicker
CalendarForeColor
Menetapkan warna teks pada kalender.

CalendarMonth-
Background
Menetapkan warna latar belakang dari kalender.

CustomFormat
Menetapkan format string kustom untuk opsi pengguna.

Format
Menetapkan format dari tanggal dan/ atau waktu yang digunakan untuk opsi pengguna.

MaxDate
Tanggal dan waktu maksimum yang dapat diseleksi.

MinDate
Tanggal dan waktu minimum yang dapat diseleksi.

ShowCheckBox
Mengindikasikan jika sebuah CheckBox harus ditampilkan di sisi kiri dari tanggal dan waktu terseleksi.

ShowUpDown

Mengindikasikan apakah kendali menampilkan Button panah atas dan bawah. Berguna ketika DateTimePicker dipakai untuk menyeleksi sebuah waktu. Kedua Button itu dapat dipakai untuk menambah atau mengurangi jam, menit, dan detika.

Value
Data yang diseleksi oleh pengguna.

Event pada DateTimePicker
ValueChanged
Dipicu ketika properti Value berubah, termasuk ketika pengguna memilih tanggal atau waktu baru.


Gambar 9.10 Beberapa properti dan sebuah event dari kelas DateTimePicker

Gambar 9.11 mendemonstrasikan penggunaan sebuah objek DateTimePicker untuk memilih sebuah waktu. Banyak perusahaan menggunakan fungsionalitas semacam ini.

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 9.11: DateTimePickerLoadForm.cs
// Menggunakan sebuah DateTimePicker untuk menyeleksi waktu.
using System;
using System.Windows.Forms;

namespace UjiDateTimePicker
{
    // Form memampukan pengguna memilih tanggal menggunakan DateTimePicker
    // dan menampilkan estimasi tanggal pengiriman
    public partial class DateTimePickerForm : Form
    {
        // konstruktor default
        public DateTimePickerForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        private void dateTimePicker_ValueChanged(
            object sender, EventArgs e)
        {
            DateTime tglPengiriman = dateTimePicker.Value;

             // menambawa waktu ekstra ketika menjumpai weekend
            if ( tglPengiriman.DayOfWeek == DayOfWeek.Friday ||
                tglPengiriman.DayOfWeek == DayOfWeek.Saturday ||
                tglPengiriman.DayOfWeek == DayOfWeek.Sunday )

                //estimasi tiga hari untuk pengiriman
                tampilLabel.Text =
                    tglPengiriman.AddDays( 3 ).ToLongDateString();
            else
            // sebaliknya, estimasi dua hari
                tampilLabel.Text =
                tglPengiriman.AddDays( 2 ).ToLongDateString();
        } // akhir metode dateTimePicker_ValueChanged

        private void DateTimePickerForm_Load(object sender, EventArgs e)
        {
            // pengguna tidak dapat memilih hari-hari sebelum hari ini
            dateTimePicker.MinDate = DateTime.Today;

            // pengguna hanya dapat memilih tanggal pada tahun ini
            dateTimePicker.MaxDate = DateTime.Today.AddYears(1);
        } // akhir metode DateTimePickerForm_Load
    } // akhir kelas DateTimePickerForm
} // akhir namespace UjiDateTimePicker


Objek DateTimePicker (dateTimePicker) memiliki properti Format yang ditetapkan menjadi Long, jadi pengguna dapat menyeleksi sebuah tanggal dan tidak waktu pada aplikasi ini. Ketika pengguna menyeleksi sebuah tanggal, event ValueChanged akan terjadi. Event handler untuk event ini (baris 18-35) pertama-tama membaca tanggal yang diseleksi dari properti Value pada kendali DateTimePicker (baris 21). Baris 24-26 menggunakan properti DayOfWeek dari struktur DateTime untuk menentukan hari dalam minggu (dimana tanggal yang dipilih jatuh pada hari itu). Nilai-nilai hari direpresentasikan menggunakan enumerasi DayOfWeek. Baris 29-30 dan 33-34 menggunakan metode AddDays untuk menambah tanggal sebesar tiga hari atau dua hari. Tanggal yang dihasilkan kemudian ditampilkan dalam format Long menggunakan metode ToLongDateString.


Pada aplikasi ini, Anda tidak ingin pengguna untuk memilih hari pengiriman sebelum hari ini, atau satu hari setelah satu tahun ke depan. Untuk melakukannya, Anda menetapkan properti MaxDate dan MinDate dari DateTimePicker ketika Form dimuat (baris 40 dan 43). Properti Today menghasilkan hari ini, dan metode AddYears (dengan sebuah argumen 1) dipakai untuk menetapkan sebuah tanggal satu tahun ke depan.


9.5 Kendali LinkLabel
Kendali LinkLabel menampilkan link ke sumberdaya lain, seperti file atau halaman web (Gambar 9.12). Sebuah LinkLabel muncul sebagai teks yang digaris-bawahi (diwarnai biru secara default). Ketika mouse berada di atas link itu, pointer akan berubah menjadi sebuah tangan; ini sama dengan watak dari hyperlink pada halaman web. Link dapat mengubah warna untuk mengindikasikan bahwa ia belum pernah dikunjungi, atau baru saja dikunjungi, atau aktif. Ketika diklik, LinkLabel memicu event LinkClicked (Gambar 9.13). Kelas LinkLabel diderivasi dari kelas Label dan oleh karena itu mewarisi semua fungsionalitas pada kelas Label.


Gambar 9.12 Kendali LinkLabel pada suatu program


Properti dan event pada  kelas LinkLabel
Penjelasan
Properti-properti DateTimePicker
ActiveLinkColor
Menetapkan warna dari link aktif ketika pengguna dalam proses pengklikan. Warna default (umumnya merah) ditetapkan oleh sistem.

LinkArea
Menetapkan porsi teks mana pada LinkLabel yang menjadi bagian dari link.

LinkBehavior
Menetapkan watak link, seperti bagaimana link tampak ketika mouse berada di atasnya.

LinkColor
Menetapkan warna asli dari link sebelum ia dikunjungi. Warna default (umumnya biru) ditetapkan oleh sistem.

LinkVisited
Jika true, link akan tampak seperti telah dikunjungi (warnanya berubah menjadi nilai yang ditetapkan oleh properti VisitedLinkColor). Nilai defaultnya adalah false.

Text
Menetapkan teks pada kendali.

UseMnemonic
Jika true, karakter & pada properti Text berperan sebagai kunci pintas (sama dengan kunci pintas Alt pada menu).

VisitedLinkColor
Menetapkan warna dari sebuah link yang telah dikunjungi. Warna default (umumnya ungu) ditetapkan oleh sistem operasi.

Event pada LinkLabel dengan argumen LinkLabelLinkClickedEventArgs
LinkClicked
Dipicu ketika link diklik. Ini merupakan event default ketika kendali diklik dua kali pada mode Design.


Gambar 9.13 Beberapa properti dan sebuah event dari kelas LinkLabel


Kelas UjiLinkLabelForm (Gambar 9.14) menggunakan tiga LinkLabel untuk menghubungkan ke drive C:, suatu situs web, dan aplikasi Notepad. Properti-properti cDriveLinkLabel, biobsesLinkLabel, dan notepadLinkLabel dari kelas LinkLabel menjelaskan tujuan tiap link.

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 9.14: UjiLinkLabelForm.cs
// Menggunakan LinkLabel untuk menciptakan hyperlink.
using System;
using System.Windows.Forms;

namespace UjiLinkLabel
{
    // Form menggunakan beberapa LinkLabel untuk menjelajah drive C:\,
    // halaman web, dan menjalankan Notepad
    public partial class UjiLinkLabelForm : Form
    {
        // konstruktor default
        public UjiLinkLabelForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        // menjelajah drive C:\
        private void cDriveLinkLabel_LinkClicked(object sender,
            LinkLabelLinkClickedEventArgs e)
        {
            // mengubah LinkColor setelah diklik
            cDriveLinkLabel.LinkVisited = true;

            System.Diagnostics.Process.Start(@"C:\");
        } // akhir metode cDriveLinkLabel_LinkClicked

        // mengunjungi www.biobses.com
        private void biobsesLinkLabel_LinkClicked(object sender,
            LinkLabelLinkClickedEventArgs e)
        {
            // mengubah LinkColor setelah diklik
            biobsesLinkLabel.LinkVisited = true;

            System.Diagnostics.Process.Start("http://www.biobses.com");
        } // akhir metode biobsesLinkLabel_LinkClicked

        // menjalankan Notepad
        private void notepadLinkLabel_LinkClicked(object sender,
            LinkLabelLinkClickedEventArgs e)
        {
            // mengubah LinkColor setelah diklik
            notepadLinkLabel.LinkVisited = true;

            // program dipanggil seperti menjalankan
            // menu dan path penuh tidak dibutuhkan
            System.Diagnostics.Process.Start("notepad");
        } // akhir metode notepadLinkLabel_LinkClicked
    } // akhir kelas UjiLinkLabelForm
} // akhir namespace UjiLinkLabel

Event handler untuk LinkLabel memanggil metode Start dari kelas Process (namespace System.Diagnostics), yang memampukan Anda untuk mengeksekusi program-program lain, atau mengunjungi situs web dari suatu aplikasi. Metode Start dapat memiliki satu argumen, yaitu file yang akan dibuka, atau dua argumen, yaitu aplikasi yang akan dijalankan dan argumen command-line.

Event handler untuk event LinkClicked pada cDriveLinkLabel menjelajah drive C:\ (baris 19-26). Baris 23 menetapkan properti LinkVisited menjari true, yang mengubah warna link dari biru menjadi ungu (warna-warna LinkVisited dapat dikonfigurasi melalui jendela Properties). Event handler ini kemudian melewatkan @”C:\” kepada metode Start (baris 25), yang membuka jendela Windows Explorer.





Event handler untuk event LinkClicked pada biobsesLinkLabel (baris 29-36) membuka halaman web www.biobses.com pada penjelajah web. Anda melakukan ini dengan melewatkan alamat halaman-web sebagai sebuah string (baris 35), yang membuka halaman web pada jendela penjelajah. Baris 33 menetapkan properti LinkVisited menjadi true.

Event handler untuk event LinkClicked pada notepadLinkLabel (baris 39-48) membuka aplikasi Notepad. Baris 43 menetapkan properti LinkVisited menjadi true sehingga link tampak sebagai link yang telah dikunjungi. Baris 47 melewatkan argumen “notepad” kepada metode Start, yang menjalankan notepad.exe.


9.6 Kendali ListBox
Kendali ListBox memampukan pengguna untuk melihat dan menyeleksi dari pelbagai item pada sebuah daftar. ListBox merupakan entitas GUI statis, yang berarti bahwa pengguna tidak dapat secara langsung mengedit daftar item. Pengguna diberikan TextBox dan Button untuk menetapkan item-item yang akan ditambahkan ke dalam daftar, tetapi penambahan aktual harus dilakukan pada kode. Kendali CheckedListBox (pada bagian selanjutnya) mewarisi sebuah ListBox dengan mencantumkan CheckBox di samping tiap item pada daftar. Ini memampukan pengguna untuk menempatkan tanda centang pada beberapa item sekaligus, sama seperti kendali CheckBox. (Pengguna juga dapat memilih beberapa item dari sebuah ListBox dengan menetapkan properti SelectionMode pada ListBox). Gambar 9.15 menampilkan sebuah ListBox dan CheckedListBox. Pada kedua kendali, batang penggeser muncul jika jumlah item melebihi area ListBox.



Gambar 9.15 ListBox dan CheckedListBox pada sebuah Form


Gambar 9.16 mencantumkan beberapa properti dan metode ListBox. Properti SelectionMode menentukan jumlah item yang dapat diseleksi. Properti ini memiliki nilai-nilai None, One, MultiSimple, dan MulitExtender). Event SelectedIndexChanged terjadi ketika pengguna menyeleksi sebuah item baru.

Properti, metode dan event pada  kelas ListBox
Penjelasan
Properti-properti ListBox
Items
Koleksi yang memuat item-item di dalam ListBox.

MultiColumn
Mengindikasikan apakah ListBox dapat menampilkan kolom jamak. Kolom jamak mengeliminasi batang penggeser vertikal dari tampilan.

SelectedIndex
Menghasilkan indeks dari item terseleksi. Jika tidak ada item yang diseleksi, properti ini menghasilkan -1. Jika pengguna menyeleksi beberapa item, properti ini menghasilkan salah satu dari indeks yang terseleksi. Jika beberapa item diseleksi, Anda menggunakan properti SelectedIndices.

SelectedIndices
Menghasilkan sebuah koleksi yang memuat indeks-indeks dari semua item yang terseleksi.

SelectedItem
Menghasilkan sebuah referensi yang menunjuk ke item terseleksi. Jika beberapa item diseleksi, ia menghasilkan item dengan nomor indeks terendah.

SelectedItems
Menghasilkan sebuah koleksi yang memuat item-item terseleksi.

SelectionMode
Menentukan jumlah item yang dapat diseleksi dan cara-cara bagaimana item jamak dapat diseleksi. Nilai None, One (default), MultiSimple (seleksi jamak diijinkan), MultiExtended (seleksi jamak diijinkan menggunakan kombinasi dari kunci atau klik mouse dan kunci Shift dan Ctrl).

Sorted
Mengindikasikan apakah item-item diurutkan secara alfabetikal. Pengaturan nilai properti ini menjadi true akan mengurutkan item-item. Nilai defaultnya adalaha false.

Metode pada ListBox
ClearSelected
Mendeseleksi setiap item.

GetSelected
Menghasilkan true jika item pada indeks tertentu diseleksi.

Event pada ListBox
SelectedIndexChanged
Dipicu ketika indeks terseleksi berubah. Ini merupakan event default ketika kendali ini diklik dua kali pada designer.


Gambar 9.16 Beberapa properti, metode, dan sebuah event dari kelas ListBox


Kedua ListBox dan CheckedListBox memiliki properti Items, SelectedItem, dan SelectedIndex. Properti Items menghasilkan sebuah koleksi yang memuat item-item. Koleksi merupakan sebuah cara umum dalam mengelola daftar object pada .NET Framework. Banyak komponen GUI .NET (misalnya, ListBox) menggunakan koleksi untuk memuat objek-objek internal. Koleksi yang dihasilkan oleh properti Items direpresentasikan sebagai sebuah objek bertipe ListBox.ObjectCollection. Properti SelectedItem menghasilkan item terseleksi pada ListBox. Jika pengguna ingin menyeleksi beberapa item sekaligus, digunakan koleksi SelectedItems untuk menghasilkan semua item terseleksi sebagai sebuah ListBox.Selected-ObjectCollection. Properti SelectedIndex menghasilkan indeks dari item terseleksi. Jika terdapat lebih dari satu item terseleksi, Anda menggunakan properti SelectedIndices, yang menghasilkan sebuah ListBox.SelectedCollection. Jika tidak ada item yang diseleksi, properti SelectedIndex akan menghasilkan -1. Metode GetSelected mengambil sebuah indeks sebagai argumen dan menghasilkan true jika item terkait terseleksi.


Menambahkan Item-Item pada ListBox dan CheckedListBox
Untuk menambahkan item-item pada sebuah ListBox atau pada sebuah CheckedListBox, Anda perlu menambahkan objek-objek tersebut pada koleksi Items. Ini dapat dilakukan dengan memanggil metode Add untuk menambahkan sebuah string pada koleksi Items dari ListBox atau CheckedListBox. Sebagai contoh, Anda dapat menuliskan

satuListBox.Items.Add( satuListItem );

untuk menambahkan string satuListItem pada ListBox satuListBox. Untuk menambahkan beberapa objek, Anda dapat memanggil metode Add beberapa kali atau memanggil metode AddRange untuk menambahkan sebuah array objek. Kelas ListBox dan CheckedListBox masing-masing memanggil metode metode ToString untuk menentukan Label bagi entri dari objek terkait pada daftar. Ini akan memampukan Anda untuk menambahkan pelbagai objek pada sebuah ListBox atau CheckedListBox, yang nantinya dapat diakses lewat properti SelectedItem dan SelectedItem.

Secara alternatif, Anda dapat menambahkan beberapa item pada ListBox dan CheckedListBox secara visual dengan memeriksa properti Items pada jendela Properties. Dengan mengklik tombol ellipsis akan membuka String Collections Editor, yang memuat sebuah area teks untuk menambahkan item-item; setiap item berada pada baris terpisah (Gambar 9.17). Visual Studio kemudian akan menuliskan kode untuk menambahkan string-string ini pada koleksi Items di dalam metode InitializeComponent.


Gambar 9.17 String Collection Editor


Gambar 9.18 menggunakan kelas UjiListBoxForm untuk menambah, menghapus, dan membersihkan item-item dari ListBox tampilListBox. Kelas UjiListBoxForm menggunakan TextBox masukanTextBox untuk memampukan pengguna mengetikkan item baru. Ketika pengguna mengklik Button Tambah, item baru akan muncul pada tampilLixBox. Sama halnya, jika pengguna menyeleksi sebuah item dan mengklik Hapus, item tersebut akan terhapus. Ketika diklik, Hapus akan membersihkan semua entri pada tampilListBox. Pengguna menghentikan aplikasi dengan mengklik Keluar.

Event handler tambahButton_Click (baris 20-24) memanggil metode Add dari koleksi Items pada ListBox. Metode ini mengambil sebuah string sebagai item yang akan ditambahkan pada tampilListBox. Pada kasus ini, string yang digunakan merupakan masukan pengguna dari masukanTextBox (baris 22). Setelah item ditambahkan, masukanTextBox dibersihkan (baris 23).

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
// Gambar 9.18: UjiListBoxForm.cs
// Program untuk menambah, menghapus, membersihkan item-item ListBox.
using System;
using System.Windows.Forms;

namespace UjiListBox
{
    // Form menggunakan sebuah TextBox dan empat Button untuk menambah,
    // menghapus, dan membersihkan item-item ListBox
    public partial class UjiListBoxForm : Form
    {
        // konstruktor default
        public UjiListBoxForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        // menambah item baru pada ListBox (teks dari TextBox)
        // dan membersihkan TextBox
        private void tambahButton_Click(object sender, EventArgs e)
        {
            tampilListBox.Items.Add(masukanTextBox.Text);
            masukanTextBox.Clear();
        } // akhir metode tambahButton_Click

        // menghapus item jika ia diseleksi
        private void hapusButton_Click(object sender, EventArgs e)
        {
// memeriksa apakah item diseleksi, jika ya, dihapuskan
if (tampilListBox.SelectedIndex != -1)
    tampilListBox.Items.RemoveAt(
        tampilListBox.SelectedIndex);
        } // akhir metode hapusButton_Click

        // menghapus semua item pada ListBox
        private void bersihButton_Click(object sender, EventArgs e)
        {
            tampilListBox.Items.Clear();
        } // akhir metode bersihButton_Click

        // keluar aplikasi
        private void keluarButton_Click(object sender, EventArgs e)
        {
            Application.Exit();
        } // akhir metode keluarButton_Click
    } // akhir kelas UjiListBoxForm
} // akhir namespace UjiListBox

Event handler hapusButton_Click (baris 27) menggunakan metode RemoveAt untuk menghapus sebuah item dari ListBox. Event handler hapusButton_Click pertama-tama menggunakan properti SelectedIndex untuk menentukan indeks mana yang diseleksi. Jika SelectedIndex tidak bernilai -1, maka baris 31-32 akan menghapus item yang terkait dengan indeks yang terseleksi.

Event handler bersihButton_Click (baris 36-39) memanggil metode Clear dari koleksi Items (baris 38). Ini akan menghapus semua entri pada tampilListBox. Terakhir, event handler keluarButton_Click (baris 42-45) menghentika aplikasi dengan memanggil metode Application.Exit (baris 44).



9.7 Kendali CheckedListBox
Kendali CheckedListBox diderivasi dari ListBox dan menampilkan sebuah CheckBox dengan tiap itemnya. Item-item dapat ditambahkan melalui metode Add dan AddRange atau melalui String Collection Editor. CheckedListBox mengijinkan item jamak untuk dicentang, tetapi seleksi item lebih ketat. Nilai-nilai untuk properti SelectionMode hanya None dan One. One membolehkan seleksi tunggal, sedangkan None tidak mengijinkan seleksi. Karena sebuah item harus diseleksi pada saat mencentang, Anda harus menetapkan SelectionMode menjadi One jika Anda ingin pengguna mencentang item-item. Beberapa properti, sebuah metode, dan sebuah event dari kelas CheckedListBox ditampilkan pada Gambar 9.19.

Event ItemCheck terjadi ketika pengguna mencentang atau tidak mencentang sebuah item CheckListBox. Properti CurrentValue dan NewValue menghasilkan nilai-nilai CheckState untuk keadaa item sekarang dan keadaan item terbaru. Perbandingan kedua nilai ini memampukan Anda untuk menentukan apakah item CheckedListBox dicentang atau tidak dicentang. Kendali CheckedListBox juga memiliki properti SelectedItems dan SelectedIndices (yang diwarisi dari kelas ListBox).

Properti, metode dan event pada  kelas CheckedListBox
Penjelasan
Properti-properti CheckedListBox
CheckedItems
Menghasilkan koleksi item-item yang dicentang sebagai sebuah CheckListBox.CheckedListBoxIndexCollection. Ini membedakannya dari item terseleksi, yang disoroti (tetapi belum tentu dicentang).

CheckedIndices
Menghasilkan indeks dari semua item tercentang sebagai sebuah CheckListBox.CheckedListBoxIndexCollection.

CheckOnClick
Ketika true dan pengguna mengklik sebuah item, item tersebut diseleksi dan dicentang atau tidak dicentang. Secara default, properti ini bernilai false, yang berarti bahwa pengguna harus menyeleksi sebuah item, kemudian mengkliknya kembali untuk mencentang atau tidak mencentangnya.

SelectionMode
Menentukan apakah item-item dapat diseleksi dan dicentang. Nilai-nilai yang mungkin adalah One (default; mengijinkan pencentangan jamak) atau None (tidak mengijinkan satupun pencentangan).

Metode pada CheckedListBox
GetItemChecked
Menghasilkan sebuah indeks dan menghasilkan true jika item terkait dicentang.

Event pada CheckedListBox
ItemCheck
Dipicu ketika sebuah item dicentang atau tidak dicentang.

Properti-properti ItemCheckEventArgs
CurrentValue
Mengindikasikan apakah item terkini dicentang atau tidak dicentang. Nilai-nilai yang mungkin adalah Checked, Unchecked dan Indeterminate.

Index
Menghasilkan sebuah indeks berbasis-nol dari item yang berubah.

NewValue
Menetapkan keadaan baru dari sebuah item.


Gambar 9.19 Beberapa properti, metode, dan sebuah event dari kelas CheckedListBox


Pada Gambar 9.20, kelas UjiCheckedListBoxForm menggunakan sebuah CheckedListBox dan sebuah ListBox untuk menampilkan seleksi buku-buku pilihan pengguna. CheckedListBox memampukan pengguna untuk menyeleksi beberapa judul. Pada String Collection Editor, item-item tersebut ditambahkan untuk beberapa buku penulis. ListBox (dinamai dengan tampilListBox) menampilkan seleksi pengguna.

Ketika pengguna mencentang atau tidak mencentang sebuah item pada itemCheckedListBox_ItemCheck, sebuah event ItemCheck terjadi dan event handler itemCheckedListBox_ItemCheck (baris 19-31) dieksekusi. Sebuah statemen if...else (baris 27-30) menentukan apakah pengguna mencentang atau tidak mencentang sebuah item pada CheckedListBox. Baris 27 menggunakan properti NewValue untuk menentukan apakah item sedang dicentang (CheckState.Checked). Jika pengguna mencentang sebuah item, maka baris 28 akan menambahkan entri yang dicentang pada ListBox tampilListBox. Jika pengguna tidak mencentang sebuah item, maka baris 30 akan menghapus item terkait dari tampilListBox. Event handler ini ciptakan dengan memilih CheckedListBox pada mode Design. Kemudian Anda perlu melihat event-event pada jendela Properties dan mengklik dua kali pada event ItemCheck. Event default untuk sebuah CheckedListBox adalah sebuah event SelectedIndexChanged.

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
// Gambar 9.20: UjiCheckedListBoxForm.cs
// Menggunakan sebuah CheckedListBox untuk menambahkan item-item.
using System;
using System.Windows.Forms;

namespace UjiCheckedListBox
{
    // Form menggunakan sebuah CheckedListBox untuk menambahkan item-item
    public partial class UjiCheckedListBoxForm : Form
    {
        // konstruktor default
        public UjiCheckedListBoxForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        // item yang akan diubah
        // menambahkan atau menghapus item
        private void itemCheckedListBox_ItemCheck(
            object sender, ItemCheckEventArgs e)
        {
            // mendapatkan referensi dari item terseleksi
            string item = itemCheckedListBox.SelectedItem.ToString();

            // jika item dicentang, tambahkan ke ListBox
            // sebaliknya, hapus dari ListBox
if (e.NewValue == CheckState.Checked)
    tampilListBox.Items.Add(item);
            else
                tampilListBox.Items.Remove(item);
        } // akhir metode itemCheckedListBox_ItemCheck
    } // akhir kelas UjiCheckedListBoxForm
} // akhir namespace UjiCheckedListBox





9.8 Kendali ComboBox
Kendali ComboBox menggabungkan fitur-fitur TextBox dengan daftar drop-down (sebuah komponen GUI yang memuat sebuah daftar dengan suatu nilai yang dapat diseleksi). ComboBox biasanya muncul sebagai sebuah TextBox dengan sebuah panah bawah di sisi kanannya. Secara default, pengguna dapat memasukkan teks pada TextBox atau mengklik panah bawah untuk menampilkan sebuah daftar dari item-item terdefinisi. Jika pengguna memilih sebuah elemen dari daftar ini, elemen tersebut akan ditampilkaan pada TextBox. Jika daftar itu memuat lebih banyak elemen daripada yang dapat ditampilkan pada daftar drop-down, maka batang penggeser akan muncul. Jumlah item maksimum yang dapat ditampilkan oleh sebuah daftar drop-down pada suatu waktu ditetapkan dengan properti MaxDropDownItems. Gambar 9.21 menampilkan contoh ComboBox pada tiga jenis keadaan.

Sama seperti kendali ListBox, Anda dapat menambah objek-objek pada koleksi Items secara programatikal, menggunakan metode Add dan AddRange, atau secara visual, dengan String Collection Editor. Gambar 9.22 mencantumkan beberapa properti dan sebuah event dari kelas ComboBox.


Gambar 9.21 Demonstrasi ComboBox


Properti dan event pada  kelas ComboBox
Penjelasan
Properti-properti ComboBox
DropDownStyle
Menentukan tipe dari ComboBox. Nilai Simple berarti bahwa porsi teks dapat diedit dan porsi pada daftar dapat dilihat. Nilai DropDown (default) berarti bahwa porsi teks dapat diedit tetapi pengguna perlu mengklik tombol panah untuk melihat porsi daftar. Nilai DropDownList berarti bahwa porsi teks tidak dapat diedit dan penguna perlu mengklik tombol panah untuk melihat porsi daftar.

Items
Koleksi item-item pada kendali ComboBox.

MaxDropDownItems
Menetapkan jumlah item maksimum (antara 1 dan 100) yang dapat ditampilkan oleh daftar drop-down. Jika jumlah item melebih jumlah item maksimum yang dapat ditampilkan, batang penggeser akan muncul.

SelectedIndex
Menghasilkan indeks dari item terseleksi, atau -1 jika tidak ada yang diseleksi.

SelectedItem
Menghasilkan sebuah referensi ke item terseleksi.

Sorted
Mengindikasikan apakah item-item diurutkan secara alfabetikal. Pengaturan nilai properti ini menjadi true akan mengurutkan item-item. Nilai defaultnya adalah false.

Event pada CheckedListBox
SelectedIndexChanged
Dipicu ketika indeks yang terseleksi berubah (seperti ketika sebuah item yang berbeda diseleksi). Ini merupakan event default ketika kendali diklik dua kali pada designer.


Gambar 9.22 Beberapa properti dan sebuah event dari kelas ComboBox


Properti DropDownStyle menentukan tipe dari ComboBox dan direpresentasikan sebagai sebuah nilai dari enumerasi ComboBox, yang memuat nilai-nilai Simple, DropDown, dan DropDownList. Opsi Simple tidak menampilkan panah bawah. Melainkan, sebuah batang penggeser akan muncul di samping kendali, agar pengguna dapat memilih pilihan dari daftar yang tersedia. Pengguna dapat mengetikkan pilihannya. Nilai enumerasi DropDown (default) menampilkan sebuah daftar drop-down ketika panah bawah diklik (atau kunci panah bawah ditekan). Pengguna dapat mengetikkan sebuah item baru pada ComboBox. Nilai enumerasi adalah DropDownList, yang menampilkan sebuah daftar drop-down tetapi tidak mengijinkan pengguna untuk mengetikkan pilihan pada TextBox.

Kendali ComboBox memiliki properti Items (sebuah koleksi), SelectedItem, dan SelectedIndex, yang sama dengan properti-properti terkait pada ListBox. Paling banyak terdapat satu item terseleksi pada ComboBox. Jika tidak ada item yang diseleksi, maka properti SelectedIndex bernilai -1. Ketika item terseleksi berubah, event SelectedIndexChanged akan terjadi.

Kelas UjiComboBox (Gambar 9.23) memampukan pengguna untuk menyeleksi sebuah bangun untuk digambarkan menggunakan ComboBox. Bangun-bangun tersebut adalah lingkaran, elips, persegi, atau pie (dalam versi terisi dan versi kosong). ComboBox pada contoh ini tidak dapat diedit, jadi pengguna tidak dapat mengetik sesuatu pada TextBox.

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
// Gambar 9.23: UjiComboBoxForm.cs
// Menggunakan ComboBox untuk memilih bangun yang akan digambar.
using System;
using System.Drawing;
using System.Windows.Forms;

namespace UjiComboBox
{
    // Form menggunakan ComboBox untuk memilih bangun yang akan digambar
    public partial class UjiComboBoxForm : Form
    {
        // konstruktor default
        public UjiComboBoxForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        // mendapatkan indeks dari bangun
        private void gambarComboBox_SelectedIndexChanged(
            object sender, EventArgs e)
        {
            // menciptakan objek grafik, Pen dan SolidBrush
            Graphics grafikKu = base.CreateGraphics();

            // menciptakan Pen menggunakan warna DarkRed
            Pen penKu = new Pen( Color.DarkRed );

            // menciptakan SolidBrush menggunakan warna DarkRed
            SolidBrush solidBrushKu = new SolidBrush( Color.DarkRed );

            // membersihkan area penggambaran,menetapkannya menjadi warna white
            grafikKu.Clear( Color.White );

            // mencari indeks, menggambar bangun tertentu
            switch (gambarComboBox.SelectedIndex)
            {
                 case 0: // kasus Lingkaran diseleksi
                    grafikKu.DrawEllipse( penKu, 50, 50, 150, 150 );
                    break;
                case 1: // kasus Persegi diseleksi
                    grafikKu.DrawRectangle( penKu, 50, 50, 150, 150 );
                    break;
                case 2: // kasus Elips diseleksi
                    grafikKu.DrawEllipse( penKu, 50, 85, 150, 115 );
                    break;
                case 3: // kasu Pie diseleksi
                    grafikKu.DrawPie( penKu, 50, 50, 150, 150, 0, 45 );
                    break;
                case 4: // kasus Lingkaran Terisi diseleksi
                    grafikKu.FillEllipse( solidBrushKu, 50, 50, 150, 150 );
                    break;
                case 5: // kasus Persegi Terisi diseleksi
                    grafikKu.FillRectangle( solidBrushKu, 50, 50, 150,
                        150 );
                    break;
                case 6: // kasus Elips Terisi diseleksi
                    grafikKu.FillEllipse( solidBrushKu, 50, 85, 150, 115 );
                    break;
                case 7: // kasus Pie Terisi diseleksi
                    grafikKu.FillPie( solidBrushKu, 50, 50, 150, 150, 0,
                        45 );
                    break;
            } // akhir switch

            grafikKu.Dispose(); // melepaskan objek Graphics
        } // akhir metode gambarComboBox_SelectedIndexChanged
    } // akhir kelas UjiComboBoxForm
} // akhir namespace UjiComboBox





Setelah menciptakan ComboBox citraComboBox, Anda membuatnya agar tidak bisa diedit dengan menetapkan properti DropDownStyle menjadi DropDownList pada jendela Properties. Berikutnya, Anda menambahkan item-item Lingkaran, Persegi, Elips, Pie, Lingkaran Terisi, Persegi Terisi, Elips Terisi, dan Pie Terisi pada koleksi Items menggunakan String Collection Editor. Kapanpun pengguna menyeleksi sebuah item dari citraComboBox, event SelectedIndexChanged akan terjadi dan event handler citraComboBox_SelectedIndexChanged (baris 19-66) akan dieksekusi. Baris 23-29 menciptakan sebuah objek Graphics, yaitu sebuah Pen dan sebuah SolidBrush, yang dipakai untuk menggambar pada Form. Objek Graphics (baris 23) memampukan sebuah pen dan brush untuk menggambar pada suatu komponen, menggunakan salah satu dari beberapa metode Graphics.

Objek Pen (baris 26) dipakai oleh metode DrawEllipse, DrawRectangle, dan DrawPie (baris 38, 41, 44, dan 47) untuk menggambarkan outline dari tiap bangun. Objek SolidBrush (baris 29) dipakai oleh metode FillEllipse, FillRectangle, dan FillPie (baris 50, 53-54, 57, dan 60-61) untuk mengisi bangun terkait. Baris 32 mewarnai Form menjadi White, menggunakan metode Clear dari kelas Graphics.

Aplikasi menggambar sebuah bangun berdasarkan indeks dari item terseleksi. Statemen switch (baris 35-63) menggunakan citraComboBox.SelectedIndex untuk menentukan item mana yang diseleksi pengguna. Metode DrawEllipse dari kelas Graphics (baris 38) mengambil sebuah Pen, dan koordinat (x, y) dari pojok kiri-atas, lebar dan tinggi kotak pembatas (dimana elips akan ditampilkan). Titik awal sistem koordinat berada pada pojok kiri-atas dari Form; koordinat x bertambah ke kanan, dan koordinat y bertambah ke bawah. Baris 38 menggambarkan sebuah lingkaran. Baris 44 menggambarkan sebuah elips.

Metode DrawRectangle dari kelas Graphics (baris 41) mengambil sebuah Pen, koordinat (x, y) dari pojok kiri-atas, dan lebar dan tinggi dari persegi yang akan digambarkan. Metode DrawPie (baris 47) menggambar sebuah pie sebagai potongan dari elips. Metode DrawPie mengambil sebuah Pen, koordinat (x, y) dari pojok kiri-atas, dan sudut (dalam derajat). Sudut tersebut bertambah seiring dengan arah jarum jam. Metode FillEllipse (baris 50 dan 57), FillRectangle (baris 53-54), dan FillPie (baris 60-61) sama dengan versi tak-terisi masing-masing, kecuali bahwa ketiga metode ini mengambil sebuah objek Brush (menggantikan objek Pen).


9.9 Kendali TreeView
Kendali TreeView menampilkan simpul-simpul secara hierarkis pada sebuah pohon. Secara tradisional, simpul merupakan objek yang memuat nilai dan dapat dihubungkan ke simpul-simpul lain. Simpul induk memuat simpul-simpul anak, dan simpul anak bisa menjadi induk bagi simpul-simpul lain. Dua simpul anak yang memiliki simpul induk yang sama dipandang sebagai simpul saudara atau simpul setingkat.  Pohon merupakan koleksi simpul, yang biasanya diorganisir secara hierarkis. Simpul induk pertama pada pohon adalah simpul akar (TreeView dapat memiliki beberapa simpul akar). Sebagai contoh, sistem file pada komputer dapat direpresentasikan sebagi pohon. Direktori level-atas (misalnya, C:) merupakan simpul akar, dimana tiap subfolder dari C: akan menjadi simpul anak dan setiap folder anak memiliki anak-anaknya sendiri. Kendali TreeView berguna dalam menampilkan informasi secara hierarkis, seperti struktur file yang telah dijelaskan. Gambar 9.24 menampilkan sebuah kendali TreeView sederhana pada suatu Form.


Gambar 9.24 TreeView menampilkan sebuah pohon sederhana


Simpul induk dapat diekspansi atau disusutkan dengan mengklik kotak + atau kotak – yang ada di sisi kirinya. Simpul-simpul tanpa anak tidak memiliki kotak ini.

Simpul-simpul pada sebuah TreeView merupakan instans-instans dari kelas TreeNode. Setiap TreeNode memiliki sebuah koleksi Nodes (bertipe TreeNodeCollection), yang memuat daftar TreeNode-TreeNode lain (simpul-simpul anaknya). Properti Parent menghasilkan sebuah referensi ke simpul induk (atau null jika simpul adalah simpul akar). Gambar 9.25 dan Gambar 9.26 mencantumkan beberapa properti dari TreeView dan TreeNode, beberapa metode dari TreeNode, dan sebuah event dari TreeView.


Properti dan event pada  kelas TreeView
Penjelasan
Properti-properti TreeView
CheckBoxes
Mengindikasikan apakah CheckBox muncul di samping simpul. Nilai true menampilkan CheckBox. Nilai defaultnya adalah false.

ImageList
Menetapkan sebuah objek ImageList yang memuat ikon-ikon simpul. Sebuah objek ImageList merupakan koleksi yang memuat objek-objek Image.

Nodes
Menghasilkan koleksi yang memuat beberapa TreeNode pada kendali sebagai sebuah TreeNodeCollection. Properti ini memuat metode Add (menambahkan sebuah objek TreeNode), Clear (menghapus keseluruhan koleksi), dan Remove (menghapus simpul tertentu). Penghapusan simpul induk akan menghapus semua simpul anaknya.

SelectedNode
Simpul terseleksi.

Event pada TreeView
AfterSelect
Dipicu setelah simpul yang terseleksi berubah. Ini merupakan event default ketika kendali diklik ganda pada designer.


Gambar 9.25 Beberapa properti dan sebuah event dari kelas TreeView


Properti dan event pada  kelas TreeNode
Penjelasan
Properti-properti TreeNode
Checked
Mengindikasikan apakah TreeNode dicentang atau tidak (properti CheckBox harus ditetapkan menjadi true pada TreeView induk).

FirstNode
Menetapkan simpul pertama pada koleksi Nodes (yaitu, simpul pertama pada pohon).

FullPath
Mengindikasikan path dari sebuah simpul, diawali dari akar pohon.

ImageIndex
Menetapkan indeks citra pada ImageList yang akan ditampilkan ketika simpul dideseleksi.

LastNode
Menetapkan simpul terakhir pada koleksi Nodes (yaitu, simpul terakhir pada pohon).

NextNode
Simpul selevel (saudara) sesudahnya.

Nodes
Koleksi beberapa TreeNode yang dimuat di dalam simpul terkini (yaitu, semua anak dari simpul terkini). Ia memuat metode Add (menambahkan sebuah objek TreeNode), Clear (menghapus keseluruhan koleksi), dan Remove (menghapus simpul tertentu). Penghapusan simpul induk akan menghapus semua simpul anaknya.

PrevNode
Simpul selevel (saudara) sebelumnya.

SelectedImageIndex
Menetapkan indeks dari citra di dalam ImageList yang akan dipakai ketika simpul diseleksi.

Text
Menetapkan teks pada TreeNode.

Metode-metode pada kelas TreeNode
Collapse
Menyusutkan sebuah simpul.

Expand
Mengekspansi sebuah simpul.

ExpandAll
Mengeskpansi semua anak dari sebuah simpul.

GetNodeCount
Menghasilkan jumlah simpul anak.


Gambar 9.26 Beberapa properti dan metode dari kelas TreeNode


Untuk menambahkan simpul-simpul pada TreeView secara visual, Anda bisa mengklik tombol elips yang ada di samping properti Nodes pada jendela Properties. Ini akan membuka TreeNode Editor (Gambar 9.27), yang menampilkan sebuah pohon kosong yang merepresentasikan TreeView. Ada beberapa Button untuk menciptakan dan menambahkan akar atau menghapusnya. Di sisi kanan adalah properti-properti pada simpul terkini. Di sini, Anda bisa menamai-ulang simpul.


Gambar 9.27 TreeNode Editor


Untuk menambah simpul-simpul secara programatikal, Anda pertama-tama menciptakan sebuah simpul akar. Anda menciptakan sebuah objek TreeNode yang baru dan melewatkannya sebuah string yang akan ditampilkan. Kemudian Anda memanggil metode Add untuk menambahkan TreeNode yang baru ini pada koleksi Nodes dari TreeView. Jadi, untuk menambahkan sebuah simpul akar pada TreeView treeViewKu, Anda menuliskan

treeViewKu.Nodes.Add( new TreeNode( akarLabel ) );

dimana treeViewKu merupakan TreeView tempat destinasi penambahan simpul-simpul, dan akarLabel merupakan teks yang akan ditampilkan pada treeViewKu. Untuk menambahkan anak-anak pada sebuah simpul akar, Anda menambahkan beberapa TreeNode baru pada koleksi Nodes. Anda memilih simpul akar tertentu dari TreeView dengan menuliskan

treeViewKu.Nodes[ indeksKu ]

dimana indeksKu merupakan indeks dari simpul akar yang ada pada koleksi Nodes dari treeViewKu. Anda menambahkan simpul-simpul pada simpul anak menggunakan proses yang sama. Untuk menambahkan sebuah simpul anak pada simpul akar dengan indeks indeksKu, dituliskan

treeViewKu.Nodes[ indeksKu ].Nodes.Add( new TreeNode( anakLabel ) );

Kelas TreeViewStrukturDirektoriForm (Gambar 9.28) menggunakan sebuah TreeView untuk menampilkan isi dari sebuah direktori yang dipilih pengguna. Sebuah TextBox dan Button dipakai untuk menetapkan direktori. Pertama-tama, pengguna memasukkan path penuh dari direktori yang ingin ditampilkan. Kemudian pengguna mengklik Button untuk menetapkan direktori tertentu sebagai simpul akar pada TreeView. Setiap subdirektori pada direktori ini menjadi simpul anak. Tataletak ini sama dengan yang dipakai pada Windows Explorer. Folder-folder dapat dieksepasi atau dikolapskan dengan mengklik kotak plus atau kotak minus yang ada di sampingnya.

Ketika pengguna mengklik enterButton, semua simpul pada direktoriTreeView dihapus semuanya (baris 86). Kemudian, jika direktori memang ada (baris 73), path yang dimasukkan pada masukanTextBox dipakai untuk menciptakan simpul akar. Baris 76 menambahkan direktori pada direktoriTreeView sebagai simpul akar, dan baris 79-80 memangil metode IsiTreeView (baris 21-62), yang mengambil sebuah direktori (sebuah string) dan sebuah simpul induk. Metode PopulateTreeView kemudian menciptakan simpul-simpul anak yang terkait dengan sub-subdirektori dari direktori yang diterimanya sebagai argumen.

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
// Gambar 9.28: TreeViewStrukturDirektoriForm.cs
// Menggunakan TreeView untuk menampilkan struktur direktori.
using System;
using System.Windows.Forms;
using System.IO;

namespace TreeViewStrukturDirektori
{
    // Form menggunakan TreeView untuk menampilkan struktur direktori
    public partial class TreeViewStrukturDirektoriForm : Form
    {
        string substringDirektori; //menyimpan bagian akhir dari nama path

        // konstruktor default
        public TreeViewStrukturDirektoriForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        // mengisi simpul terkiti dengan sub-subdirektori
        public void IsiTreeView(
            string nilaiDirektori, TreeNode simpulInduk )
        {
            // array menyimpan semua subdirektori di dalam direktori
            string[] arrayDirektori =
                Directory.GetDirectories( nilaiDirektori );

            // mengisi simpul terkini dengan sub-subdirektori
            try
            {
                // memeriksa apakah subdirektori ada
                if ( arrayDirektori.Length != 0 )
                {
                    // untuk tiap subdirektori, diciptakan TreeNode baru,
                    // menambahkannya sebagai anak dari simpul terkini dan
                    // mengisi simpul-simpul anak dengan sub-subdirektori
                    foreach ( string direktori in arrayDirektori )
                    {
                        // mendapatkan bagian akhir dari nama path
                        // dengan memanggil GetFileNameWithoutExtension
                        // dari kelas Path
                        substringDirektori =
                            Path.GetFileNameWithoutExtension( direktori );

                        // menciptakan TreeNode untuk direktori terkini
                        TreeNode simpulKu = new TreeNode( substringDirektori );

                        // menambahkan simpul terkini pada simpul induk
                        simpulInduk.Nodes.Add( simpulKu );

                        // secara rekursif mengisi setiap subdirektori
                        IsiTreeView( direktori, simpulKu );
                    } // akhir foreach
                } // akhir if
            } //akhir try

            // menangkap eksepsi
            catch ( UnauthorizedAccessException )
            {
                simpulInduk.Nodes.Add( "Akses ditolak" );
            } // akhir catch
        } // akhir metode IsiTreeView

        // menangani event Click pada enterButton
        private void enterButton_Click(object sender, EventArgs e)
        {
            // menghapus semua simpul
            direktoriTreeView.Nodes.Clear();

            // memeriksa apakah direktori yang dimasukkan pengguna ada
            // jika ada, kemudian isi pada TreeView,
            // jika tidak ada, tampilkan MessageBox error
            if ( Directory.Exists( masukanTextBox.Text ) )
            {
                // menambahkan nama path penuh pada direktoriTreeView
                direktoriTreeView.Nodes.Add(masukanTextBox.Text);

                // menyisipkan sub-subfolder
                IsiTreeView(
                    masukanTextBox.Text, direktoriTreeView.Nodes[0]);
            }
            // menampilkan MessageBox jika direktori tidak ditemukan
            else
                MessageBox.Show(masukanTextBox.Text + " tidak ditemukan.",
                    "Direktori Tidak Ditemukan", MessageBoxButtons.OK,
                    MessageBoxIcon.Error );
        } // akhir metode enterButton_Click
    } // akhir metode TreeViewStrukturDirektoriForm
} // akhir namespace TreeViewStrukturDirektori

Metode IsiTreeView (baris 21-62) mendapatkan daftar subdirektori, menggunakan metode GetDirectories dari kelas Directory (namespace System.IO) pada baris 25-26. Metode GetDirectories mengambil sebuah string (direktori terkini) dan menghasilkan sebuah array yang memuat string-string (sub-subdirektori). Jika sebuah direktori tidak dapat diakses karena alasan keamanan, maka eksepsi UnAuthorizedAccessException akan dilempar. Baris 58-61 akan menangkap eksepsi ini dan menambahkan sebuah simpul yang memuat “Akses ditolak”.



9.10 Kendali ListView
Kendali ListView sama dengan ListBox, dimana keduanya menampilkan daftar yang dapat dipilih oleh pengguna (satu atau lebih item). ListView lebih kompleks karena dapat menampilkan item-item yang berbeda format. Sebagai contoh, sebuah ListView dapat menampilkan ikon-ikon di samping item-item (dikendalikan oleh properti SmallImageList, LargeImageList, atau StateImageList) dan menampilkan detil dari item-item pada kolom-kolom. Properti MultiSelect (sebuah bool) menentukan apakah item jamak dapat diseleksi atau tidak. CheckBox dapat dicantumkan dengan menetapkan properti CheckBoxes (sebuah bool) menjadi true, agar penampilan ListView mirip dengan CheckedListBox. Properti View menetapkan tataletak dari ListBox. Properti Activate menentukan metode yang akan dipakai pengguna untuk memilih item. Detil dari properti-properti ini dan event ItemActivate dijelaskan pada Gambar 9.29.

Properti dan event pada  kelas ListView
Penjelasan
Properti-properti ListView
Activation
Menentukan bagaimana pengguna mengaktivasi sebuah item. Properti ini mengambil sebuah nilai pada enumerasi ItemActivation. Nilai-nilai yang mungkin adalah OneClick (aktivasi satu-klik), TwoClick (aktivasi klik ganda, item mengubah warnanya ketika diseleksi), dan Standard (default; aktivasi klik ganda, item tidak mengubah warnanya).

CheckBoxes
Mengindikasikan apakah item-item muncul dengan CheckBox. Nilai true menampilkan CheckBox. Default adalah false.

LargeImageList
Menetapkan ImageList yang memuat ikon-ikon besar untuk ditampilkan.

Items
Menghasilkan koleksi ListViewItem pada kendali.

MultiSelect
Menentukan apakah seleksi jamak diijinkan. Nilai default adalah true, yang membolehkan seleksi jamak.

SelectedItems
Menghasilkan koleksi dari item-item terseleksi sebagai sebuah ListView.SelectedListViewItemCollection.

SmallImageList
Menetapkan ImageList yang memuat ikon kecil untuk ditampilkan.

View
Menentukan penampilan dari ListViewItems. Nilai-nilai yang mungkin adalah LargeIcon (default; ikon berukuran besar ditampilkan, dimana item-item dapat ditempatkan pada beberapa kolom), SmallIcon (ikon berukuran kecil ditempilkan, dimana item-item dapat ditempatkan pada beberapa kolom), List (ikon berukuran kecil ditempilkan, dimana item-item ditempatkan pada sebuah kolom), Details ( seperti List, tetapi beberapa kolom informasi ditampilkan per item), dan Tile (ikon berukuran besar ditampilkan, informasi disediakan di sisi kanan ikon; hanya valid untuk Windows XP dan versi selanjutnya).

Event pada kelas ListView
Click
Dipicu ketika sebuah item diklik. Ini merupakan event default.

ItemActivate
Dipicu ketika sebuah item pada ListView diaktivasi (diklik atau diklik ganda). Tidak memuat spesifikasi dari item mana yang diaktivasi.


Gambar 9.29 Beberapa properti dan event dari kelas ListView

ListView memampukan Anda untuk mendefinisikan citra-citra yang dipakai sebagai ikon untuk item-item ListView. Untuk menampilkan citra, sebuah komponen ImageList diperlukan. Anda menggeret ImageList pada component tray. Kemudian, Anda memilih properti Images pada jendela Properties untuk menampilkan Image Collection Editor (Gambar 9.30).  Di sini, Anda dapat menjelajah citra-citra yang ingin Anda tambahkan pada ImageList, yang memuat sebuah array (terdiri-dari Image-Image). Penambahan citra dengan cara ini akan menanamkannya pada aplikasi (seperti sumberdaya), sehingga citra itu tidak lagi perlu disertakan secara terpisah.


Gambar 9.30 Jendela Image Collection Editor untuk sebuah komponen ImageList


9.11 Kendali TabControl
TabControl menciptakan jendela-jendela ditab, seperti pada Visual Studio (Gambar 9.31). Ini memampukan Anda untuk mempunyai lebih banyak informasi dengan ruang yang sama pada sebuah Form dan untuk mengelompokkan data yang tertampil secara logis. TabControl memuat objek-objek TabPage, yang mirip dengan Panel dan GroupBox. TabPage dapat memuat kendali-kendali. Anda pertama-tama menambahkan kendali-kendali pada objek-objek TabPage, kemudian menambahkan TabPage-TabPage tersebut pada TabControl. Hanya satu TabPage yang ditampilkan pada suatu waktu. Untuk menambahkan objek-objek pada TabPage dan TabControl, Anda menuliskan

tabPageKu.Controls.Add( controlKu );
tabControlKu.TabPages.Add( tabPageKu );



Gambar 9.31 Jendela-jendela yang ditab pada Visual Studio

Pada kedua statemen tersebut dipanggila metode Add dari koleksi Controls dan metode Add dari koleksi TabPages. Contoh itu menambahkan TabControl controlKu pada TabPage tabPageKu, kemudian menambahkan tabPageKu pada tabControlKu. Cara lain, Anda dapat menggunakan metode AddRange untuk menambahkan suatu array yang memuat beberapa TabPage atau beberapa kendali pada sebuah TabControl atau TabPage. Gambar 9.32 menampilkan sebuah contoh TabControl.


Gambar 9.32 TabControl dengan beberapa TabPage


Anda dapat menambahkan beberapa TabControl secara visual dengan menggeret dan menjatuhkannya pada sebuah Form dalam mode Design. Untuk menambahkan beberapa TabPage dalam mode Design, Anda mengklik-kanan TabControl tersebut dan memiliki Add Tab (Gambar 9.33). Alternatif lain, Anda bisa mengklik properti TabPages pada jendela Properties dan menambahkan tab pada dialog yang muncul. Untuk mengubah label tab, Anda bisa lakukan melalui properti Text dari TabPage tertentu. Anda dapat menambahkan kendali pada TabPage dengan menggeret dan menjatuhkan item kendali dari Toolbox. Untuk melihat TabPage yang berbeda, Anda mengklik tab lain. Beberapa properti dan sebuah event dari kelas TabControl dijelaskan pada Gambar 9.34.

Setiap TabPage akan memicu sebuah event Click ketika tabnya diklik. Event handler untuk event ini dapat diciptakan dengan mengklik ganda tubuh dari TabPage.

Kelas MenggunakanTabForm (Gambar 9.35) menggunakan sebuah TabControl untuk menampilkan pelbagai opsi yang berkaitan dengan teks pada sebuah label (Warna, Ukuran, dan Pesan). TabPage terakhir menampilkan pesan Tentang, yang menjelaskan kegunaan dari TabControl.


Gambar 9.33 Beberapa TabPage yang ditambahkan pada sebuah TabControl


Properti dan event pada  kelas TabControl
Penjelasan
Properti-properti TabControl
ImageList
Menampilkan citra-citra yang akan ditampilkan pada tab-tab.

ItemSize
Menetapkan ukuran tab.

Multiline
Mengindikasikan apakah lebih dari satu baris tab dapat ditampilkan.

SelectedIndex
Indeks dari TabPage terseleksi.

SelectedTab
TabPage yang terseleksi.

TabCount
Menghasilkan jumlah dari halaman tab.

TabPages
Menghasilkan koleksi yang memuat TabPage-TabPage  di dalam TabControl sebagai sebuah TabControl.TabCollection.

Event pada kelas TabControl
SelectedIndexChanged
Dipicu ketika sebuah item diklik. Ini merupakan event default.


Gambar 9.34 Beberapa properti dan event dari kelas TabControl


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Gambar 9.35: MenggunakanTabForm.cs
// Menggunakan TabControl untuk menimpalkan pelbagai pengaturan font.
using System;
using System.Drawing;
using System.Windows.Forms;

namespace MenggunakanTab
{
    // Form menggunakan beberapa Tab dan RadioButton
    public partial class MenggunakanTabForm : Form
    {
        // konstruktor default
        public MenggunakanTabForm()
        {
            InitializeComponent();
        } // akhir konstruktor default

        // event handler untuk RadioButton Hitam
        private void hitamRadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            tampilLabel.ForeColor = Color.Black; // mengubah warna menjadi hitam
        } // akhir metode hitamRadioButton_CheckedChanged

        // event handler untuk RadioButton Merah
        private void merahRadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            tampilLabel.ForeColor = Color.Red; // mengubah warna menjadi merah
        } // akhir metode merahRadioButton_CheckedChanged

        // event handler untuk RadioButton Hijau
        private void hijauRadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            tampilLabel.ForeColor = Color.Green; // mengubah warna menjadi hijau
        } // akhir metode hijauRadioButton_CheckedChanged

        // event handler untuk RadioButton 12 point
        private void ukuran12RadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            // mengubah ukuran font menjadi 12
            tampilLabel.Font = new Font(tampilLabel.Font.Name, 12);
        } // akhir metode ukuran12RadioButton_CheckedChanged

        // event handler untuk RadioButton 16 point
        private void ukuran16RadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            // mengubah ukuran font menjadi 16
            tampilLabel.Font = new Font(tampilLabel.Font.Name, 16);
        } // akhir metode ukuran16RadioButton_CheckedChanged

        // event handler untuk RadioButton 20 point
        private void ukuran20RadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            // mengubah ukuran font menjadi 20
            tampilLabel.Font = new Font(tampilLabel.Font.Name, 20);
        } // akhir metode ukuran20RadioButton_CheckedChanged

        // event handler untuk RadioButton Hallo!
        private void halloRadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            tampilLabel.Text = "Hallo!"; // mengubah teks menjadi Hallo!
        } // akhir metode halloRadioButton_CheckedChanged

        // event handler untuk RadioButton Selamat!
        private void selamatRadioButton_CheckedChanged(
            object sender, EventArgs e)
        {
            tampilLabel.Text = "Selamat!"; // mengubah teks menjadi Selamat!
        } // akhir metode selamatRadioButton_CheckedChanged
    } // akhir kelas MenggunakanTabForm
} // akhir namespace MenggunakanTab







No comments:

Post a Comment