Multiple
Form, Module, dan Menu
Kasus 106: Menamai-Ulang Form
Anda bisa mengklik-kanan nama form
pada Solution Explorer, seperti
ditunjukkan pada gambar berikut ini.
Nama form diberi nama FormUtama seperti ditampilkan pada
gambar berikut.
Kasus 107: Menambah Form Pada Projek
Anda bisa mengklik menu PROJECT
pada batang menu Visual Studio, kemudian memilih Add Windows Form.
Jendela Add New Item akan ditampilkan seperti ditunjukkan pada gambar
berikut.
Solution Explorer tampak menjadi seperti gambar berikut.
Kasus 108: Mengatur Startup Form
Form pertama yang Anda ciptakan,
secara default, merupakan startup form, yang secara otomatis ditampilkan ketika
aplikasi dijalankan. Untuk menetapkan startup form, Anda bisa mengklik-kanan
nama projek, seperti ditampilkan pada gambar berikut.
Kemudian, Anda bisa mengklik Properties, seperti ditampilkan pada
gambar berikut.
Kasus 109: Aplikasi dengan Dua Form
Public Class
FormUtama
Private Sub
tombolTampil_Click(sender As Object, e As EventArgs)
Handles tombolTampil.Click
' Menciptakan sebuah instans dari
FormPesan
Dim formPesan As New
FormPesan
' Menampilkan FormPesan
formPesan.ShowDialog()
End Sub
Private Sub
tombolKeluar_Click(sender As Object, e As EventArgs)
Handles tombolKeluar.Click
Me.Close()
End Sub
End Class
|
Kasus 110: Menambah Sebuah Module
Anda bisa mengklik menu PROJECT
pada batang menu Visual Studio, kemudian memilih Add Windows Form. Dialog Add New Item akan ditampilkan dan Anda bisa memberi-nama pada
module tersebut, seperti ditampilkan pada gambar berikut.
Kasus 111: Aplikasi Dengan Sebuah
Module dan Tiga Form
Module
ModuleMatematika
' Konstanta-konstanta untuk faktor
konversi meter ke unit-unit Inggris
Public Const
dblMETER_KE_INCI As Double = 39.37
Public Const
dblMETER_KE_KAKI As Double = 3.28
Public Const
dblMETER_KE_YARD As Double = 1.09
' Konstanta-konstanta untuk faktor
konversi inci ke unit-unit metrik
Public Const dblINCI_KE_MM As
Double = 25.4
Public Const dblINCI_KE_CM As
Double = 2.54
Public Const
dblINCI_KE_METER As Double = 0.0254
' Fungsi MeterKeInci menerima meter
sebagai argumen
' dan menghasilkan inci ekivalen
Public Function
MeterKeInci(ByVal dblMeter As Double) As Double
Return dblMeter *
dblMETER_KE_INCI
End Function
' Fungsi MeterKeKaki menerima meter
sebagai argumen
' dan menghasilkan kaki ekivalen
Public Function
MeterKeKaki(ByVal dblMeter As Double) As Double
Return dblMeter *
dblMETER_KE_KAKI
End Function
' Fungsi MeterKeYard menerima meter
sebagai argumen
' dan menghasilkan yard ekivalen
Public Function
MeterKeYard(ByVal dblMeter As Double) As Double
Return dblMeter *
dblMETER_KE_YARD
End Function
' Fungsi InciKeMM menerima inci sebagai
argumen
' dan menghasilkan milimeter ekivalen
Public Function InciKeMM(ByVal
dblInci As Double) As Double
Return dblInci * dblINCI_KE_MM
End Function
' Fungsi InchesToCM menerima inci sebagai
argumen
' dan menghasilkan sentimeter ekivalen
Public Function InciToCM(ByVal
dblInci As Double) As Double
Return dblInci * dblINCI_KE_CM
End Function
' Fungsi InciKeMeter menerima inci
sebagai argumen
' dan menghasilkan meter ekivalen
Public Function
InciKeMeter(ByVal dblInci As Double) As Double
Return dblInci *
dblINCI_KE_METER
End Function
End Module
|
Public Class
FormUtama
Private Sub
tombolKonversiMeter_Click(sender As Object, e As EventArgs)
Handles tombolKonversiMeter.Click
' Menciptakan sebuah instans dari
FormMeter_Ke_Inggris
Dim formMeter_Ke_Inggris As
New FormMeter_Ke_Inggris
' Menampilkan FormPesan
formMeter_Ke_Inggris.ShowDialog()
End Sub
Private Sub
tombolKonversiInci_Click(sender As Object, e As EventArgs)
Handles tombolKonversiInci.Click
' Menciptakan sebuah instans dari
FormInci_Ke_Metrik
Dim formInci_Ke_Metrik As
New FormInci_Ke_Metrik
' Menampilkan FormPesan
formInci_Ke_Metrik.ShowDialog()
End Sub
Private Sub
tombolKeluar_Click(sender As Object, e As EventArgs)
Handles tombolKeluar.Click
Me.Close()
End Sub
End Class
|
Public Class
FormMeter_Ke_Inggris
Private Sub
tombolMeterKeInci_Click(sender As Object, e As EventArgs)
Handles tombolMeterKeInci.Click
Dim dblMeter As Double ' memuat meter
Dim dblInci As Double ' memuat inci
Try
'Membaca meter
dblMeter = CDbl(teksJumMeter.Text)
'Mengkonversi meter menjadi inci
dblInci = MeterKeInci(dblMeter)
'Menampilkan hasil
MessageBox.Show(dblMeter.ToString() & " sama dengan
" &
dblInci.ToString() &
" inci")
Catch ex As Exception
'Menampilkan pesan error
MessageBox.Show("Error:
Masukkan nilai numerik")
End Try
End Sub
Private Sub
tombolMeterKeKaki_Click(sender As Object, e As EventArgs)
Handles tombolMeterKeKaki.Click
Dim dblMeter As Double ' memuat meter
Dim dblKaki As Double ' memuat kaki
Try
'Membaca meter
dblMeter =
CDbl(teksJumMeter.Text)
'Mengkonversi meter menjadi kaki
dblKaki = MeterKeKaki(dblMeter)
'Menampilkan hasil
MessageBox.Show(dblMeter.ToString() & " sama dengan
" &
dblKaki.ToString() &
" kaki")
Catch ex As Exception
'Menampilkan pesan error
MessageBox.Show("Error:
Masukkan nilai numerik")
End Try
End Sub
Private Sub
tombolMeterKeYard_Click(sender As Object, e As EventArgs)
Handles tombolMeterKeYard.Click
Dim dblMeter As Double ' memuat meter
Dim dblYard As Double ' memuat yard
Try
'Membaca meter
dblMeter =
CDbl(teksJumMeter.Text)
'Mengkonversi meter menjadi yard
dblYard = MeterKeYard(dblMeter)
'Menampilkan hasil
MessageBox.Show(dblMeter.ToString() & " sama dengan
" &
dblYard.ToString() &
" yard")
Catch ex As Exception
'Menampilkan pesan error
MessageBox.Show("Error:
Masukkan nilai numerik")
End Try
End Sub
End Class
|
Public Class
FormInci_Ke_Metrik
Private Sub
tombolInciKeMM_Click(sender As Object, e As EventArgs)
Handles tombolInciKeMM.Click
Dim dblInci As Double ' memuat inci
Dim dblMM As Double ' memuat milimeter
Try
'Membaca inci
dblInci = CDbl(teksJumInci.Text)
'Mengkonversi inci menjadi
milimeter
dblMM = InciKeMM(dblInci)
'Menampilkan hasil
MessageBox.Show(dblInci.ToString()
& " sama dengan " &
dblMM.ToString() & "
milimeter")
Catch ex As Exception
'Menampilkan pesan error
MessageBox.Show("Error:
Masukkan nilai numerik")
End Try
End Sub
Private Sub
tombolInciKeCM_Click(sender As Object, e As EventArgs)
Handles tombolInciKeCM.Click
Dim dblInci As Double ' memuat inci
Dim dblCM As Double ' memuat sentimeter
Try
'Membaca inci
dblInci = CDbl(teksJumInci.Text)
'Mengkonversi meter menjadi
sentimeter
dblCM = InciKeMM(dblInci)
'Menampilkan hasil
MessageBox.Show(dblInci.ToString() & " sama dengan
" &
dblCM.ToString() & " sentimeter")
Catch ex As Exception
'Menampilkan pesan error
MessageBox.Show("Error:
Masukkan nilai numerik")
End Try
End Sub
Private Sub
tombolInciKeMeter_Click(sender As Object, e As EventArgs)
Handles tombolInciKeMeter.Click
Dim dblInci As Double ' memuat inci
Dim dblMeter As Double ' memuat meter
Try
'Membaca inci
dblInci = CDbl(teksJumInci.Text)
'Mengkonversi meter menjadi meter
dblMeter = InciKeMM(dblInci)
'Menampilkan hasil
MessageBox.Show(dblInci.ToString() & " sama dengan
" &
dblMeter.ToString() &
" meter")
Catch ex As Exception
'Menampilkan pesan error
MessageBox.Show("Error:
Masukkan nilai numerik")
End Try
End Sub
End Class
|
Kasus 112: Aplikasi Biro Diving dengan Module,
Menu, dan Multiple Form
Module
ModuleHitungHarga
'Konstanta-konstanta global
Public Const
g_intMINIMUM_UNTUK_DISKON As Integer = 5
Public Const
g_decPERSEN_DISKON As Decimal = 0.1D
' Fungsi HitungDiskon menerima sebuah
total paket sebagai argumen
' dan menghasilkan jumlah diskon untuk
total tersebut.
Public Function
HitungDiskon(decTotal As Decimal) As Decimal
Dim decDiskon As Decimal
' Memuat diskon
' Menghitung diskon
decDiskon = decTotal *
g_decPERSEN_DISKON
' Menghasilkan diskon
Return decDiskon
End Function
End Module
|
Public Class
FormPaketScubaDiving
Private Sub
tombolHitung_Click(sender As Object, e As EventArgs)
Handles tombolHitung.Click
' Konstanta untuk harga per orang
untuk paket ini
Const decSCUBA_HARGA_PER_ORANG
As Decimal = 3000000D
' Variabel-variabel lokal
Dim intJumlahOrang As Integer
' Jumlah orang
Dim decDiskon As Decimal
' Jumlah diskon
Dim decTotal As Decimal
' Biaya total
Try
' Membaca jumlah orang
intJumlahOrang =
CInt(teksJumlahOrang.Text)
' Menghitung total sebelum diskon
diterapkan
decTotal = intJumlahOrang *
decSCUBA_HARGA_PER_ORANG
' Menentukan apakah diskon dapat
diberikan
If intJumlahOrang >=
g_intMINIMUM_UNTUK_DISKON Then
' Menghitung jumlah diskon
decDiskon = HitungDiskon(decTotal)
' Mengurangkan diskon dari
total
decTotal = decTotal -
decDiskon
Else
' Diskon Rp.0
decDiskon = 0D
End If
' Menampilkan hasil
teksDiskon.Text = "Rp. "
& decDiskon.ToString("N1")
teksTotal.Text = "Rp. "
& decTotal.ToString("N1")
Catch ex As Exception
' Pesan error untuk masukan
tak-valid
MessageBox.Show("Masukkan
integer valid untuk jumlah orang.")
End Try
End Sub
Private Sub
tombolReset_Click(sender As Object, e As EventArgs)
Handles tombolReset.Click
' Membersihkan kotak teks
teksJumlahOrang.Clear()
teksDiskon.Text = String.Empty
teksTotal.Text = String.Empty
' Mereset fokus
teksJumlahOrang.Focus()
End Sub
Private Sub
tombolTutup_Click(sender As Object, e As EventArgs)
Handles tombolTutup.Click
Me.Close()
End Sub
End Class
|
Public Class
FormPaketSkyDiving
Private Sub
tombolHitung_Click(sender As Object, e As EventArgs)
Handles tombolHitung.Click
' Konstanta untuk harga per orang
untuk paket ini
Const decSKY_HARGA_PER_ORANG As
Decimal = 2500000D
' Variabel-variabel lokal
Dim intJumlahOrang As Integer
' Jumlah orang
Dim decDiskon As Decimal
' Jumlah diskon
Dim decTotal As Decimal
' Biaya total
Try
' Membaca jumlah orang
intJumlahOrang =
CInt(teksJumlahOrang.Text)
' Menghitung total sebelum diskon
diterapkan
decTotal = intJumlahOrang * decSKY_HARGA_PER_ORANG
' Menentukan apakah diskon dapat
diberikan
If intJumlahOrang >=
g_intMINIMUM_UNTUK_DISKON Then
' Menghitung jumlah diskon
decDiskon =
HitungDiskon(decTotal)
' Mengurangkan diskon dari
total
decTotal = decTotal -
decDiskon
Else
' Diskon Rp.0
decDiskon = 0D
End If
' Menampilkan hasil
teksDiskon.Text = "Rp.
" & decDiskon.ToString("N1")
teksTotal.Text = "Rp. "
& decTotal.ToString("N1")
Catch ex As Exception
' Pesan error untuk masukan
tak-valid
MessageBox.Show("Masukkan
integer valid untuk jumlah orang.")
End Try
End Sub
Private Sub
tombolReset_Click(sender As Object, e As EventArgs)
Handles tombolReset.Click
' Membersihkan kotak teks
teksJumlahOrang.Clear()
teksDiskon.Text = String.Empty
teksTotal.Text = String.Empty
' Mereset fokus
teksJumlahOrang.Focus()
End Sub
Private Sub
tombolTutup_Click(sender As Object, e As EventArgs)
Handles tombolTutup.Click
Me.Close()
End Sub
End Class
|
Public Class
FormUtama
Private Sub
KeluarToolStripMenuItem_Click(sender As Object, e As EventArgs)
Handles
KeluarToolStripMenuItem.Click
'Menutup form
Me.Close()
End Sub
Private Sub
ScubaDivingToolStripMenuItem_Click(sender As Object, e As
EventArgs) Handles
ScubaDivingToolStripMenuItem.Click
' Menciptakan sebuah instans dari
FormPaketScubaDiving
Dim formPaketScubaDiving As
New FormPaketScubaDiving
' Menampilkan FormPaketScubaDiving
formPaketScubaDiving.ShowDialog()
End Sub
Private Sub
SkyDivingToolStripMenuItem_Click(sender As Object, e As
EventArgs)
Handles
SkyDivingToolStripMenuItem.Click
' Menciptakan sebuah instans dari
FormPaketSkyDiving
Dim formPaketSkyDiving As
New FormPaketSkyDiving
' Menampilkan FormPaketSkyDiving
formPaketSkyDiving.ShowDialog()
End Sub
Private Sub
TentangToolStripMenuItem_Click(sender As Object, e As
EventArgs)
Handles
TentangToolStripMenuItem.Click
' Menampilkan kotak pesan sederhana
MessageBox.Show("Aplikasi
Biro Diving Versi 1.0")
End Sub
End Class
|
Kasus 113: Demonstrasi Penggunaan
Kontrol ErrorProvider
Sekarang,
Anda akan menampilkan pesan error secara langsung pada form menggunakan kontrol
ErrorProvider, bukan melalui pesan
popup pada kotak pesan. Dengan menggunakan kontrol ErrorProvider, Anda dapat menempatkan indikasi error di samping
bidang yang mengalami error, sama seperti kontrol validator pada aplikasi Web.
Meskipun
Anda dapat menambahkan beberapa komponen ErrorProvider
pada sebuah form, umumnya Anda dapat menggunakan satu kontrol ErrorProvider untuk semua kontrol pada
suatu form. Begitu Anda menempatkan ErrorProvider
pada component tray, Anda dapat
memvalidasi suatu kontrol. Jika nilai data tak valid, maka komponen ErrorProvider akan menampilkan sebuah
ikon di samping bidang yang mengalami error dan menampilkan pesan popup sama
seperti ToolTip.
Logika
program tidak berubah dari solusi MessageBox.
Ketika Anda mengidentifikasi sebuah error, Anda dapat menggunakan metode ErrorProvider SetError, yang
memunculkan ikon.
Format umum dari metode SetError:
ObjekErrorProvider.SetError(NamaKontrol,
StringPesan)
Contoh:
ErrorProvider1.SetError
(kotakTeksKuantitas, "Kuantitas
harus numerik." )
ErrorProvider1.SetError (kotakTeksKartuKredit, "Bidang ini perlu diisi.")
Public Class
FormErrorProvider
Const DISKON_Decimal As Decimal
= 0.15D
Private Sub
tombolHitung_Click(sender As Object, e As EventArgs)
Handles tombolHitung.Click
' Menghitung harga dan diskon
Dim kuantitasInteger As
Integer
Dim hargaDecimal,
hargaTotalDecimal, diskonDecimal,
hargaDiDiskonDecimal As Decimal
' Membersihkan semua pesan
ErrorProvider1.Clear()
Try
' Mengkonversi kuantitas menjadi
variabel numerik
kuantitasInteger =
Integer.Parse(teksKuantitas.Text)
Try
' Mengkonversi harga jika
kuantitas berhasil dibaca
hargaDecimal =
Decimal.Parse(teksHarga.Text)
' Menghitung nilai-nilai
penjualan
hargaTotalDecimal =
kuantitasInteger * hargaDecimal
diskonDecimal =
hargaTotalDecimal * DISKON_Decimal
hargaDiDiskonDecimal =
hargaTotalDecimal - diskonDecimal
' Memformat dan menampilkan
hasil
teksTotalHarga.Text =
"Rp. " & hargaTotalDecimal.ToString("N1")
teksPersenDiskon.Text =
"Rp. " & diskonDecimal.ToString("N1")
teksHargaDiDiskon.Text =
"Rp. " &
hargaDiDiskonDecimal.ToString("N1")
Catch ex As Exception
' Menangani eksepsi harga
ErrorProvider1.SetError(teksHarga, "Harga harus numerik.")
With teksHarga
.Focus()
.SelectAll()
End With
End Try
Catch ex As Exception
' Menangani eksepsi kuantitas
ErrorProvider1.SetError(teksKuantitas, "Kuantitas harus
numerik.")
With teksKuantitas
.Focus()
.SelectAll()
End With
End Try
End Sub
Private Sub
tombolHapus_Click(sender As Object, e As EventArgs)
Handles tombolHapus.Click
' Menghapus kotak-kotak teks pada
form
teksJudul.Clear()
teksHarga.Clear()
teksTotalHarga.Clear()
teksHargaDiDiskon.Clear()
teksPersenDiskon.Clear()
With teksKuantitas
.Clear()
.Focus()
End With
End Sub
Private Sub
tombolKeluar_Click(sender As Object, e As EventArgs)
Handles tombolKeluar.Click
Me.Close()
End Sub
End Class
|
Kasus 114: Properti MaxLength dan
CharacterCasing dari Kotak Teks
Anda
dapat memakai properti MaxLength dan
CharacterCasing dari kotak teks
untuk membantu pengguna dalam memasukkan data yang tepat. Jika Anda menetapkan
properti MaxLength, maka pengguna
tidak dapat memasukkan jumlah karakter yang melebih jumlah karakter maksimum.
Antarmuka pengguna akan mengeluarkan bunyi dan menahan titik penyisipan pada
tempatnya untuk mengindikasikan error kepada pengguna. Properti CharacterCasing memiliki nilai Normal, Upper, atau Lower,
dengan nilai default Normal. Jika
Anda menetapkan nilai Upper,
misalnya, maka tiap karakter yang diketikkan pengguna secara otomatis akan
dikonversi menjadi huruf besar.
Program
berikut memiliki sebuah komponen ErrorProvider,
dan semua kontrol pada form memiliki properti CausesValidation yang ditetapkan menjadi True. Kotak teks teksPropinsi
memiliki properti MaxLength yang
ditetapkan menjadi 5 dan properti CharacterCasing-nya
menjadi Upper.
Public Class
FormMaxLength
Private Sub
teksNamaDepan_Validating(sender As Object, e As
System.ComponentModel.CancelEventArgs)
Handles teksNamaDepan.Validating
' Memvalidasi entri yang diperlukan
ErrorProvider1.SetError(teksNamaDepan, "")
' Memeriksa string kosong
If teksNamaDepan.Text =
String.Empty Then
' Membatalkan event
e.Cancel = True
ErrorProvider1.SetError(teksNamaDepan, "Bidang ini diperlukan.")
End If
End Sub
Private Sub
teksNamaBelakang_Validating(sender As Object, e As
System.ComponentModel.CancelEventArgs)
Handles teksNamaBelakang.Validating
' Memvalidasi entri yang diperlukan
ErrorProvider1.SetError(teksNamaBelakang, "")
' Memeriksa string kosong
If teksNamaBelakang.Text.Length
= 0 Then
' Membatalkan event
e.Cancel = True
ErrorProvider1.SetError(teksNamaBelakang, "Bidang ini
diperlukan.")
End If
End Sub
Private Sub
teksPropinsi_Validating(sender As Object, e As
System.ComponentModel.CancelEventArgs)
Handles teksPropinsi.Validating
' Memastikan bahwa propinsi adalah 5
karakter
' Properti CharacterCasing
mengkonversi ke huruf besar
' Karakter MaxLength membatasi
masukan menjadi 5 karakter
' Membatalkan sembarang error
sebelumnya
ErrorProvider1.SetError(teksPropinsi,
"")
If teksPropinsi.Text.Length
<> 5 Then
' Membatalkan event dan memilih
teks
e.Cancel = True
teksPropinsi.SelectAll()
ErrorProvider1.SetError(teksPropinsi, "Harus 5 karakter.")
End If
End Sub
Private Sub
teksJumlah_Validating(sender As Object, e As
System.ComponentModel.CancelEventArgs)
Handles teksJumlah.Validating
' Memvalidasi jumlah numerik dalam
rentang nilai yang ditetapkan
Dim jumlahInteger As Integer
' Mereset semua error sebelumnya
ErrorProvider1.SetError(teksJumlah,
"")
Try
jumlahInteger =
Integer.Parse(teksJumlah.Text)
If jumlahInteger < 1 Or
jumlahInteger > 10 Then
' Membatalkan event
e.Cancel = True
teksJumlah.SelectAll()
ErrorProvider1.SetError(teksJumlah, "Jumlah harus
dalam rentang 1 sampai 10")
End If
Catch ex As Exception
' Membatalkan event
e.Cancel = True
teksJumlah.SelectAll()
ErrorProvider1.SetError(teksJumlah, "Jumlah harus
dalam rentang 1 sampai 10")
End Try
End Sub
Private Sub
FormMaxLength_FormClosing(sender As Object, e As
FormClosingEventArgs)
Handles MyBase.FormClosing
' Tidak mengijinkan validasi untuk
membatalkan penutupan form
e.Cancel = False
End Sub
End Class
|
No comments:
Post a Comment