Monday, January 2, 2017

Bab 9. Soal & Penyelesaian Visual Basic .NET


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