Atas permintaan stash, aku post juga materi baru mengenai dunia pemrograman, yaitu Lingkungan Pemrograman Visual (LPV). Topik ini membutuhkan pengetahuan dasar mengenai PBO, jadi yang sama sekali belum tahu mengenai PBO silakan baca dulu topik ini (http://forum.rpgfantasy.web.id/index.php?topic=167.0). Belum pernah buat program? Baca dulu topik ini (http://forum.rpgfantasy.web.id/index.php?topic=22.0).
Oh ya, topik ini akan menggunakan Visual Basic 2008 Express Edition. Yang belum punya bisa unduh gratis di situs Microsoft (http://www.microsoft.com/express/download). Topik ini bisa juga dikerjakan menggunakan Visual Basic 2005 ke bawah, namun tentunya akan ada berbagai penyesuaian. Yang masih menggunakan VB 6, mohon maaf, konsepnya agak beda, tapi sedikit-sedikit akan aku berikan petunjuk untuk pengguna setia VB 6.
Kenapa aku menggunakan Visual Basic? Well, bahasa ini adalah bahasa termudah untuk dipelajari, karena sesuai namanya, bahasanya benar-benar "basic" alias dasar, sehingga mudah dimengerti. Bahasa visual lainnya yang cukup populer adalah Delphi.
OK, siap? Tapi, apa sih LPV itu? Apa bedanya dengan pemrograman yang biasanya kita lakukan?
Sesuai namanya, pada LPV kita akan bekerja juga pada lingkungan pemrograman visual. Artinya, kita juga akan merancang tampilan antarmuka (user interface) dan melakukan pemrograman berdasarkan masukan pengguna dan apa saja yang terjadi di program kita selama itu. Wah, kok bisa begitu?
Ambil saja contoh program Calculator. Saat kita mengeklik angka, yang muncul adalah angka. Setelah kita mengeklik berbagai angka dan operator (misal saja 1 + 1) lalu kita klik tanda =, akan muncul hasilnya. Itu semua dilakukan dengan LPV, yang menggunakan konsep event-driven programming. Waduh, apa lagi nih? Tenang! Event-driven programming adalah cara membuat program berdasarkan even-even yang terjadi. Even itu sendiri adalah semua hal yang dilakukan pengguna terhadap program kita. Misalnya, mengeklik, menulis, mengubah ukuran jendela, dan lain-lain. Beda kan dengan konsep pemrograman yang selama ini kita lakukan?
Lalu, apakah susah membuat program berbasis even? Jawabannya tidak. Dengan Visual Basic, even-even itu sudah dibuatkan. Kita tinggal pakai saja.
Nah, apa sudah waktunya kita menjalankan VB 2008? Silakan!
Sudah terbuka IDE-nya? IDE adalah lingkungan tempat kita akan melakukan programming nantinya. Kalau kalian tidak mengutak-atik setting apapun, tampilnya mungkin seperti ini:
(http://img221.imageshack.us/my.php?image=04062008010545kf7.jpg)
Kita biasakan diri dulu dengan IDE VB 2008.
Di sebelah kanan, ada tab bernama Solution Explorer (kalau kebetulan tertutup, aktifkan dari menu
View > Solution Explorer. Di tab ini kita akan memanajemen
solution kita. Supaya tidak bingung, istilah Solution tidak perlu dihapalkan. Atau, anggap saja solution adalah projek kita (dan memang projek kita nantinya akan terpampang di Solution Explorer). Waduh, apa lagi itu projek?
Projek adalah kumpulan berkas-berkas yang diperlukan untuk membuat aplikasi kita (untuk seterusnya, "aplikasi" akan menggantikan istilah "program", karena kita memang akan membuat aplikasi mulai sekarang). Kalau kalian lihat di gambar di atas, di Solution Explorer sudah ada My Project (kebetulan aku sudah buat project) dan
Form1.vb. Kita kenalan dengan satu istilah lagi...
Form.
Sederhana saja, form adalah satu jendela tempat kita ingin melakukan apa saja. Aku akan menggunakan istilah "form" mulai dari sekarang. Pada awal mula, form kita masih kosong. Tugas kita adalah membuat form itu menjadi berfungsi sebagaimana aplikasi pada umumnya. Gimana caranya?
1. Menambahkan objek-objek visual.
Objek-objek visual ini di VB dinamakan
control. Kalau kalian teliti melihat gambar di atas, di sebelah kiri ada tab yang otomatis sembunyi. Kalau dibuka, isinya adalah semua kontrol yang bisa kita gunakan dalam sebuah form. Contoh kontrol adalah tombol (Button), teks (Label: tulisan biasa, Textbox: tempat pengguna mengetikkan sesuatu), daftar (Listbox), dan lain sebagainya. Kita akan berkenalan pelan-pelan dengan kontrol-kontrol yang banyak digunakan nanti.
2. Menambahkan event pada kontrol.
Pemrogramannya dimulai di sini. Kontrol itu tidak dapat berfungsi apa-apa kalau kita tidak menambahkan event. Contoh! Pada saat tombol = diklik, kita wajib melakukan kalkulasi perhitungan. Nanti kita akan kenal event Button_Click untuk melakukan hal ini. Tenang saja, event tidak wajib dihapal ;)
Siap untuk projek pertama?
Untuk memulai membuat sebuah aplikasi, kita membutuhkan
projek. Untuk membuatnya:
1. Pilih menu
File > New project... atau tekan saja jalan pintas favorit kita, Ctrl + N.
2. Pada jendela yang terbuka, pilih
Windows Forms Application.
3. Klik OK. Tunggu beberapa saat. Tab IDE baru akan terbuka dan otomatis mengarah ke
Form1.vb. Selamat datang di form pertama kita!
Tampilannya mungkin seperti ini:
(http://img223.imageshack.us/my.php?image=04062008010649bw6.jpg)
Polos ya? Memang, karena kita belum menambahkan apa-apa. Untuk sekarang, coba buka tab Toolbox dan pilih control apa saja yang menarik perhatian. Sementara ini, fokuskan perhatian pada
Common Controls saja. Oh ya, cara menambahkan kontrol ke form ada dua:
1. Klik sekali pada kontrol yang diinginkan, lalu tarik (drag) di form.
2. Klik ganda pada nama kontrol. Kontrol akan otomatis ditambahkan ke form.
OK! Setelah puas bermain-main, ayo kita buat contoh program pertama kita!
Program ini adalah permintaan dari stash. Sederhana saja, di form kita hanya ada satu tombol bertuliskan "Mulai!". Ketika kita mengeklik tombol tersebut, aplikasi kita akan menanyakan, apakah program mau dimulai. Ada dua tombol, yaitu OK dan Cancel. Kalau tombol OK ditekan, akan muncul satu jendela lagi bertuliskan "Apel". Kalau tombol Cancel ditekan, tulisan "Program dibatalkan" akan muncul. Gambarannya seperti ini:
Awal aplikasi kita:
(http://img138.imageshack.us/my.php?image=04062008011339wi6.jpg)
Setelah tombol
Mulai! diklik:
(http://imageshack.us)
Hasil tombol OK:
(http://imageshack.us)
Hasil tombol Cancel:
(http://imageshack.us)
Keren? Mungkin nggak terlalu, tapi untuk pemula, ini keren lho :) Jadi, gimana caranya?
Kita buat tampilan form kita dulu. Caranya:
1. Tambahkan kontrol
Button ke form kita. Posisi dan ukurannya bebas.
Masih ingat ya cara menambahkan kontrol ke form? Klik-tarik atau klik ganda, OK?
IDE kita akan menjadi seperti ini:
(http://img137.imageshack.us/my.php?image=04062008011931jk6.jpg)
2. Ubah teks "Button1" menjadi "Mulai!". Caranya?
Yuk lihat bagian kanan jendela kita. Ada tab Properties? Kalau kebetulan hilang, aktifkan lewat menu
View > Properties window atau tekan F4. Properties adalah karakteristik kontrol kita (bahkan form kita juga punya properti sendiri). Nah, pastikan Button kita terpilih. Cari properti
Text (di gambar agak ke bawah). Ubah saja ke "Mulai!".
Apakah IDE kalian jadi seperti ini?
(http://img147.imageshack.us/my.php?image=04062008012351wt9.jpg)
Selesai! Nggak terlalu susah kan berurusan dengan tampilan? Langkah berikutnya adalah membuatkan event untuk aplikasi kita. Bagaimana caranya?
Nah, sekarang kita buat coding-nya. Untuk membuatkan event pada tombol kita:
1. Klik ganda di tombol kita. Jendela IDE kita akan otomatis beralih ke
Code View. Yup, di VB kita akan sering beralih dari Designer View, tempat kita mendesain tampilan antarmuka, dan Code View, tempat seluruh kode pemrograman dilakukan.
IDE kalian tampak seperti ini?
(http://img85.imageshack.us/my.php?image=04062008012913lk7.jpg)
Waduh, apa saja itu? Jangan gentar dulu. Kelihatannya memang banyak istilah yang tidak kita mengerti, tapi perlahan-lahan kita akan paham dengan sendirinya.
Public Class Form1
...
End Class
Ini sebabnya aku anjurkan menguasai konsep-konsep PBO terlebih dahulu. VB sejak memasuki era .NET memang beralih menjadi sepenuhnya bahasa yang berbasis objek (seperti Ruby), jadi apapun dalam VB, entah itu form, entah itu kontrol, entah itu variabel, akan dianggap sebagai sebuah objek.
Ini adalah kelas untuk form kita. Form kita tadi namanya
Form1, dan kebetulan belum diganti. Dia bersifat publik karena tentu saja kita ingin
Form1 bisa diakses pengguna kita kan? Lalu, kok tiba-tiba di dalam kelas kita sudah ada isinya? Apa ini?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
Wuih panjangnya :D jangan khawatir, kode ini baru saja dibuatkan VB untuk kita, yaitu saat kita mengeklik ganda tombol kita tadi. Even dasar yang diberikan VB untuk kontrol Button adalah event
Click, yaitu even pengeklikan tombol. Merasa tertantang untuk menuliskannya secara manual? Boleh, tapi aku tidak sarankan untuk saat ini ;)
Ayo mulai menulis program kita! Saat mengetik, jangan kaget kalau IDE VB akan sering memunculkan daftar kata kunci sesuai dengan yang apa kita ketik. Di dalam even tadi (kursor kalian akan otomatis ada di dalam even kalau kalian tidak melakukan apa-apa sampai sekarang), ketikkan kode berikut:
Dim intJawab As Integer
intJawab = MessageBox.Show("Mau dijalankan?", "Tes", MessageBoxButtons.OKCancel)
If intJawab = vbOK Then
MessageBox.Show("Apel")
Else
MessageBox.Show("Program dibatalkan")
End If
Jangan khawatir kalau kalian tidak paham apa maksudnya (walaupun kelihatannya mudah dimengerti). Tuliskan saja dulu.
Oh ya, untuk blok tertentu (misalkan blok if, while, for, dsb.), IDE VB akan otomatis membuatkan penutupnya untuk kita, jadi kita tidak perlu khawatir kelupaan menutup sebuah blok. Huruf besar kecil diabaikan untuk kata kunci, VB akan otomatis mengubahnya sendiri menjadi titlecase (hanya huruf pertama yang dibesarkan).
Selesai? Ya! Jalankan aplikasi dengan menekan tombol mirip Play (segitiga hijau), namanya
Start Debugging. Debug sendiri adalah proses mencoba aplikasi kita, apakah sudah berjalan dengan keinginan. Jadi, apa aplikasinya sudah sesuai dengan yang stash inginkan?
Untuk yang paranoid membuat kesalahan, berikut kode lengkap untuk aplikasi ini:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim intJawab As Integer
intJawab = MessageBox.Show("Mau dijalankan?", "Tes", MessageBoxButtons.OKCancel)
If intJawab = vbOK Then
MessageBox.Show("Apel")
Else
MessageBox.Show("Program dibatalkan")
End If
End Sub
End Class
Tercengang dengan hasilnya? Boleh, tapi jangan lama-lama :D Mudah kan membuat sebuah aplikasi?
Nah, ayo sekarang kita lihat kode kita tadi! Aku harap pengetahuan dasar tentang pemrograman masih melekat kuat di ingatan ya :)
Dim intJawab As Integer
Ini adalah pembuatan sebuah variabel. Berbeda dengan Ruby, VB mengenal tipe data variabel, misalkan Integer untuk bilangan bulat, Double untuk bilangan pecahan, String untuk teks, dan lain sebagainya. Sebelum digunakan, variabel harus dideklarasikan lebih dahulu. Caranya adalah dengan kata kunci Dim, yang sebenarnya merupakan singkatan dari Dimension. Masuk akal ya?
Tapi, nama variabelnya kok aneh gitu? Kenapa nggak jawab saja (pada VB, nama variabel kalau dimulai dengan huruf harus huruf kecil)? Boleh saja, namun kita akan cepat lupa dengan tipe data variabel kita. Karena itu, biasakan memberi awalan tipe data pada nama variabel kita (misalkan int untuk Integer, dbl untuk Double, str untuk String, dsb.).
intJawab = MessageBox.Show("Mau dijalankan?", "Tes", MessageBoxButtons.OKCancel)
Wah, agak panjang... MessageBox.Show berfungsi menampilkan boks pesan (istilahnya ya "message box") tanpa kita harus repot-repot membuat form tersendiri. Parameter pertama adalah teks yang ingin kita tampilkan. Parameter kedua adalah judul boks pesan kita (kalau diabaikan, berikan string kosong "", jangan benar-benar dikosongi). Parameter ketiga adalah tombol-tombol yang ingin kita tampilkan. Tahu dari mana isinya harus MessageBoxButtons.OKCancel? Apa harus dihapal? Jangan khawatir, waktu mengetik otomatis keluar daftarnya kan? Tinggal pilih yang sesuai :)
Nah, fungsi MessageBox.Show akan mengembalikan sebuah nilai (bertipe Integer) sesuai dengan tombol yang ditekan. Dari nilai yang dikembalikan ini, kita bisa tahu jawaban pengguna. Itulah sebabnya baris berikutnya adalah...
If intJawab = vbOK Then
MessageBox.Show("Apel")
Else
MessageBox.Show("Program dibatalkan")
End If
Familiar dengan blok ini? Ini adalah blok If. Nah, vbOK adalah konstanta yang disediakan VB untuk merujuk pada nilai yang diberikan fungsi MessageBox.Show kalau yang ditekan adalah tombol OK. Yang iseng menampilkan nilai konstanta vbOK akan mendapatkan nilai 1. Jadi, kalau nilai variabel intJawab kita adalah vbOK, kita tampilkan pesan "Apel" (bentuk tersingkat fungsi MessageBox.Show hanya memiliki satu parameter, yaitu teks yang ingin ditampilkan). Kalau tidak (berarti pasti tombol Cancel yang ditekan, karena tombolnya hanya ada 2), tampilkan pesan "Program dibatalkan."
Ternyata nggak sulit kan?
Nah, sebelum lanjut, ada baiknya kita melatih diri untuk semakin terbiasa dengan konsep pemrograman visual. Jangan khawatir, latihannya nggak susah kok!
Buatlah aplikasi dengan tampilan seperti berikut:
(http://img87.imageshack.us/my.php?image=04062008020250tw6.jpg)
Wah, terlihat susah? Jangan khawatir! Kalau sepertinya susah, anggap saja akar persamaan kuadrat dihitung dari rumus:
A + B - C
2Atau, yang ingin tantangan lebih bisa mengerjakannya seperti biasa dengan rumus:
x = (-B ± sqrt(D)) / (2A), dengan D = B
2 - 4AC (sqrt adalah akar kuadrat)
Tampilkan hasilnya di tempat yang bertuliskan Label6 (teksnya terserah).
Beberapa informasi tambahan:
- Untuk mendapatkan nilai dari sebuah Textbox, gunakan properti
Text. Contoh:
strText = myTextbox.Text
Ingat, properti ini bertipe data String, jadi jika perlu diproses dalam perhitungan aritmatika, ubah dulu tipe datanya seperti diterangkan pada poin berikutnya.
- Untuk mengubah tipe data (
casting) dari string menjadi angka, gunakan fungsi
CInt (menjadi Integer) atau
CDbl (menjadi Double). Sebaliknya, untuk mengubah angka menjadi string, gunakan fungsi
CStr.
- Operasi matematika tingkat lanjut (seperti akar kuadrat, pangkat, dll) ada di objek
Math. Akar kuadrat adalah
Math.Sqrt, sementara pangkat adalah
Math.Pow.
- Untuk mengubah teks dari sebuah label, gunakan properti
Text. Contoh:
myLabel.Text = "Halo!"
Kalau ada kesulitan, silakan tanyakan di sini.
Selamat latihan!
Exshan, ini jawabanku, aku sudah run, dan hasilnya benar. Coba dicek apa ada bagian yang perlu ditambah atau perlu dikurangi.
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Define variabel
Dim dblA As Double
Dim dblB As Double
Dim dblC As Double
Dim dblD As Double
Dim dblX1 As Double
Dim dblX2 As Double
Dim text As String
Dim text2 As String
'Ngambil angka dari input user
text = NilaiA.Text
dblA = CDbl(text)
text = NilaiB.Text
dblB = CDbl(text)
text = NilaiC.Text
dblC = CDbl(text)
'Mencari nilai D
dblD = Math.Pow(dblB, 2) - 4 * dblA * dblC
'Nilai x1
dblX1 = (-dblB + Math.Sqrt(dblD)) / (2 * dblA)
'Nilai x2
dblX2 = (-dblB - Math.Sqrt(dblD)) / (2 * dblA)
'Ubah angka ke string
text = CStr(dblX1)
text2 = CStr(dblX2)
'Nyetak hasil
Hasil.Text = "Hasilnya: x1 = " & text & ", dan x2 = " & text2
End Sub
End Class
Wah, cepat sekali jawabnya :)
Jawabanmu benar, tapi ada beberapa baris yang bisa disingkat. Misalnya, variabel text dan text2 tidak diperlukan, karena sebenarnya kamu bisa melakukan seperti ini:
dblA = CDbl(NilaiA.Text) ' dan seterusnya...
Hasil.Text = "Hasilnya: x1 = " & dblX1 & " dan x2 = " & dblX2
Catatan untuk baris terakhir, operasi penggabungan string (concatenation) pada VB bisa dilakukan dengan operator &, atau yang masih nyaman dengan Ruby bisa menggunakan operator +. Lalu, apa bedanya? Operator & akan otomatis mencoba mengubah semua operand menjadi String, sementara operator + mensyaratkan semua operand harus String. Misal:
' Kita tahu persis dblX1 dan dblX1 adalah Double, jadi...
Hasil.Text = "Hasilnya: x1 = " & dblX1 & " dan x2 = " & dblX2 ' Valid!
Hasil.Text = "Hasilnya: x1 = " & CStr(dblX1) & " dan x2 = " & CStr(dblX2) ' Valid, tapi operasi CStr tidak diperlukan
Hasil.Text = "Hasilnya: x1 = " + CStr(dblX1) + " dan x2 = " + CStr(dblX2) ' Valid!
Hasil.Text = "Hasilnya: x1 = " + dblX1 + " dan x2 = " + dblX2 ' Invalid! Ini akan menyebabkan kesalahan InvalidCastException
Pada VB, pemberian komentar dilakukan dengan tanda ' dan hanya berlaku satu baris, jadi kalau mau berbaris-baris ya silakan beri tanda ' semua :D
Oh ya, pada jawabanmu ada sedikit error handling yang ditinggalkan, yaitu saat D negatif ;) aplikasi tidak akan error, tapi hasilnya nanti akan menjadi NaN alias Not a Number.
Sebelum lanjut, ada baiknya aku review sintaks-sintaks yang umum digunakan pada VB dan perbandingannya dengan Ruby.
OK, supaya yang baru pertama kali memegang VB tidak kebingungan dengan kata kunci yang tersedia, berikut aku berikan kata kunci yang sering dipakai dalam VB, disandingkan dengan Ruby (coba baca lagi artikel Buat program yuk! (http://forum.rpgfantasy.web.id/index.php?topic=22.0) kalau sudah lupa). Sintaks untuk VB 6 tidak aku berikan karena masih sama, kecuali jika aku memberikan catatan kaki.
Untuk... |
Ruby |
VB |
Deklarasi variabel |
N/A |
Dim namaVariabel As TipeData |
Konstanta |
NamaKonstanta = nilai |
Const namaKonstanta As TipeData = nilai |
Konversi tipe data |
variabel.to_i, variabel.to_f, variabel.to_s |
CInt(variabel), CDbl(variabel), CStr(variabel) |
Blok If |
if kondisi [then]
...
[elsif
...
else
...]
end
if_true if kondisi
(kondisi) ? if_true : if_false |
If kondisi Then ...
[Else If kondisi2
...
Else
...]
End If
VB tidak memiliki jalan pintas untuk perintah if_true satu baris seperti pada Ruby. |
Blok Unless |
unless kondisi [then]
...
[else
...]
end |
If Not kondisi Then ...
[Else If kondisi2
... Else
...] End If |
Blok case |
case variabel_kontrol
when kondisi1
...
[else
...] end |
Select Case variabel_kontrol Case kondisi 1
...
[Case Else
...]
End Select |
Blok for (range berupa angka) |
for variabel in range
...
end
range: nilai_awal .. nilai_akhir atau nilai_awal ... nilai_akhir |
For variabel = nilai_awal To nilai_akhir [Step increment]
...
Next |
Blok for (range berupa objek) |
for variabel in range
... end |
For Each variabel In range
...
Next |
Blok while/until |
while|until kondisi
...
end
loop do
...
end
begin
...
end while|until kondisi |
Do While|Until kondisi
...
Loop
While kondisi
...
End While
Do
...
Loop While|Until kondisi |
Komentar |
# komentar
=begin komentar banyak baris =end |
' komentar Tidak ada kata kunci untuk komentar banyak baris. |
Metode |
def nama_metode[(parameters)]
...
end |
Sub nama_metode([ByVal|ByRef parameter As TipeData, ...])
...
End Sub |
Fungsi |
def nama_fungsi[(parameters)]
...
return return_value end |
Function nama_fungsi([ByVal|ByRef parameter As TipeData, ...]) As ReturnValueDataType
...
Return return_value|nama_fungsi = return_value
End Function |
Exception |
begin
... rescue TipeException => variabel_tampung
...
[ensure
...]
end |
Try
...
Catch variabel_tampung As TipeException
...
[Finally
...] End Try
Tidak tersedia di VB6. |
Deklarasi array |
arrayku = Array.new arrayku2 = [...] |
Dim arrayku(ukuran) As TipeData |
Pengaksesan elemen array |
arrayku[indeks] |
arrayku(indeks) |
Bingung? Jangan khawatir, pelan-pelan akan aku ulang kembali poin-poin penting, seperti pembuatan metode dan fungsi sendiri, array, perulangan, dan lain-lain.
Kalau D negatif, kan emang jawabannya pasti bilangan maya, yang ditandai dengan adanya variabel i. Jadi ya wajar kalau programku keluarnya NaN.
Menurut semua orang yang sudah belajar bilangan imajiner, itu wajar kalau D negatif. Tapi, untuk orang awam (anak SMP yang baru belajar persamaan kuadrat misalnya), jelas nggak wajar dong :)
Untuk saat ini, tidak apa-apa jika aplikasi kita memberikan hasil yang sebenarnya betul tapi tampak aneh (semisal "Akar-akarnya NaN dan NaN" karena D negatif). Nanti setelah artikel ini berakhir, aku akan berikan tips bagaimana cara menyusun tampilan antarmuka yang baik, termasuk memberikan pesan-pesan yang ramah pada pengguna (in fact, ini bahkan ada teorinya). Coba bandingkan, mana yang lebih enak didengar dan ramah:
KutipAkar-akarnya NaN dan NaN.
dengan
KutipTidak ada akar-akar real.
Untuk yang menginginkan pesan kedua, kode berikut bisa digunakan (pada
Sub Button1_Click):
' Asumsikan nama Textbox yang digunakan adalah txtA, txtB, dan txtC
' sementara nama label keenam adalah lblHasil
Dim dblA As Double, dblB As Double, dblC As Double, dblD As Double
Dim dblX1 As Double, dblX2 As Double
dblA = CDbl(txtA.Text)
dblB = CDbl(txtB.Text)
dblC = CDbl(txtC.Text)
dblD = Math.Pow(dblB, 2) - 4 * dblA * dblC
If dblD < 0 Then
lblHasil.Text = "Tidak ada akar-akar real."
Else
dblX1 = (-dblB + Math.sqrt(D)) / (2 * dblA)
dblX2 = (-dblB - Math.sqrt(D)) / (2 * dblA)
lblHasil.Text = "Akar-akarnya adalah " & dblX1 & " dan " & dblX2
End If
Ini masih belum 100% ramah pengguna, karena andaikan penggunanya sangat iseng sehingga salah satu dari Textbox diisi bukan angka (sengaja atau tidak), aplikasi ini akan mengeluarkan Exception. Coba diatasi sendiri :)
Mau nanya. Misal untuk latihan itu, pada awal, mirip dengan contoh apel dulu, jadi tampilan awal cuma ada tombol mulai. Setelah tombol mulai diklik, baru muncul form seperti latihan ini. Bagaimana caranya?
Nah, kadang-kadang aplikasi kita cukup kompleks sehingga kita perlu lebih dari satu form. Seperti pertanyaan stash, suatu saat kita perlu memanggil form lain dari suatu form. Bagaimana caranya?
Ini agak beda dengan VB 6 dan VB setelahnya (.NET 2002, 2003, 2005, 2008), jadi aku berikan keduanya. Pertama-tama untuk prioritas tertinggi dulu, VB 2008 ;)
Silakan buat projek baru atau gunakan saja projek sebelumnya.
VB 2008
1. Jika hanya ada satu form, buat saja dulu. Caranya, pilih menu Project > Add Windows Form..., atau klik kanan di nama solution kita dan pilih Add > Windows Form.... Pada jendela yang terbuka, pastikan yang terpilih adalah Windows Form. Beri nama form baru ini dan klik OK.
Diasumsikan dua form yang tersedia adalah Form1 dan Form2. Untuk menyeragamkan diri dengan yang menggunakan projek sebelumnya, saat aplikasi dimulai Form2 yang akan jalan duluan alih-alih Form1. Waduh, gimana caranya?
2. Untuk mengubah form yang akan dibuka duluan saat aplikasi pertama kali berjalan (istilahnya startup form):
a. Klik kanan pada nama solution dan pilih Properties. Tab baru berjudul nama solution kita akan terbuka.
b. Buka tab Application yang ada di sebelah kiri (seharusnya otomatis terpilih).
c. Cari pilihan Startup form dan ganti pilihannya dari Form1 menjadi Form2.
d. Simpan. Sampai tahap ini, coba jalankan. Form2 akan terbuka alih-alih Form1.
3. Buat Form2 menjadi seperti permintaan stash:
a. Berikan satu Button bertuliskan "Mulai." Misalkan namanya kubiarkan Button1.
b. Berikan event Click (masih ingat ya caranya?).
c. Tuliskan kode berikut:
Dim frmNext As New Form1 ' ganti Form1 dengan nama form yang akan dibuka
frmNext.Show()
Me.Hide() ' Opsional, kalau mau menyembunyikan Form2
Sampai di tahap ini, coba jalankan. Form2 akan muncul dulu. Saat kita mengeklik tombol Mulai, Form2 akan bersembunyi (kalau baris terakhir kode di atas disertakan) dan Form1 akan muncul. Mudah kan?
Tapi tunggu, saat Form1 ditutup, kenapa seakan-akan IDE VB 2008 hang? Bukannya harusnya keluar dari mode Debugging? Sayangnya, aplikasi kita memang belum ditutup. Ingat Form2 kita? Form itu masih sembunyi dan belum dibebaskan dari memori. Lalu, bagaimana caranya?
4. Untuk memaksa aplikasi keluar saat Form1 ditutup, tambahkan event FormClosed untuk Form1. Caranya:
a. Pindah ke Code View dan pilih Form1.
b. Pada combo box kiri (combo box adalah kotak yang ada panahnya, kalau diklik akan terbuka banyak pilihan; Combobox juga merupakan Common Controls), pilih (Form1 Events). Di sebelahnya, pilih FormClosed.
Sebentar, kok ada event FormClosing? Mungkin ada yang bertanya-tanya demikian. Apa bedanya? Bedanya, FormClosed akan dijalankan setelah form ditutup. FormClosing dijalankan tepat saat form menutup, jadi kita bisa melakukan sesuatu saat form menutup, misalnya memberi pesan, bahkan membatalkan penutupan form (nanti kita akan lihat bagaimana caranya). Untuk sekarang, kita pakai FormClosed.
c. Pada event FormClosed, ketikkan kode berikut:
Application.Exit()
Wah, hanya satu baris? Coba saja jalankan. Begitu Form1 ditutup, VB 2008 akan keluar dari mode Debugging.
Selesai! Sekarang giliran VB 6...
VB 6
Caranya berbeda cukup jauh dengan VB 2008. Kita akan lakukan pelan-pelan tahap per tahap.
1. Buat projek baru atau gunakan projek yang sudah ada.
Untuk menambah form baru, pilih menu Project > Add Form... atau klik kanan pada nama projek atau Forms (pada jendela Project) dan pilih Add > Form....
Dengan kondisi yang sama, kita akan buat Form2 sebagai startup form.
2. Untuk mengubah startup form:
a. Klik kanan pada nama projek dan pilih Properties....
b. Pilih tab General.
c. Pada Startup Object, ganti ke Form2.
Coba jalankan dulu. Berhasil?
3. Buat Form2 menjadi seperti permintaan stash:
a. Tambahkan kontrol CommandButton. Asumsi namanya tetap CommandButton1.
b. Berikan event Click.
c. Tuliskan kode berikut:
Form1.Show
Me.Hide ' opsional, untuk menyembunyikan Form2
Coba jalankan. Berhasil?
Sama kasusnya seperti VB 2008, saat Form1 ditutup, VB tidak keluar dari mode Debug karena aplikasi kita belum keluar sepenuhnya. Lalu, bagaimana?
4. Untuk menutup aplikasi:
a. Pindah ke Code View untuk Form1.
b. Berikan event Unload. Caranya sama seperti pada VB 2008: di combo box kiri pilih Form dan di kanan pilih Unload.
c. Ketikkan kode berikut:
Unload Form2
Coba jalankan. Apa aplikasi menutup saat Form1 ditutup?
Kelemahan cara ini, kalau ada beberapa form yang belum ditutup, kita harus meng-unload-nya manual. Coba cari cara paling efektif untuk mengatasi kelemahan ini.
Bagaimana? Bisa menggunakan lebih dari satu form? Kalau bisa, berarti kalian sudah siap membuat aplikasi yang lebih kompleks. Berikutnya, jika tidak ada pertanyaan, kita akan berkenalan pada beberapa Common Controls yang paling sering digunakan.
Kalau ada pertanyaan, tanyakan sekarang :)
ERRATA
Tadi sempat tertulis:
Dim frmNext As New Form2 ' ganti Form2 dengan nama form tempat Button1 berada
Yang benar adalah:
Dim frmNext As New Form1 ' ganti Form1 dengan nama form yang akan dibuka
Sekarang misal, ada 2 tombol. Kalau tekan tombol A, buka form 3, kalau tekan tombol B, buka gorm 5. Bagaimana caranya?
Caranya ya sama persis :)
VB 2008:
Private Sub ButtonA_Click(...) Handles ButtonA.Click
Dim frmKu As New Form3
frmKu.Show()
End Sub
Private Sub ButtonB_Click(...) Handles ButtonB.Click
Dim frmKu As New Form5
frmKu.Show()
End Sub
Jadi, intinya untuk membuka form baru, gunakan format ini:
VB 2008:
Dim var_bantu As New namaFormYangAkanDibuka
var_bantu.Show()
var_bantu.ShowModal() ' dengan ShowModal, fokus akan tetap pada form yang terbuka
VB 6:
namaFormYangAkanDibuka.Show
OK deh, beruntung dierrata, kalau gak, aku bisa pusing 100 keliling... :D
Btw, ajarin dong cara buat tabel, grafik, dan cara ngambil data dari excel. Sori nih mungkin gak ngurut urutan teori yang seharusnya, tapi kebetulan ada program yang mau aku buat, jadi mending langsung loncat ke situ saja :D
Btw, tulis ulang dong cara membuat alignment label jadi center, dan cara membuat teksnya jadi bold, seperti yang tadi aku tanyakan pas chat, untuk pembelajaran member yang lain.
Wah, sori, tapi berhubung yang kamu minta itu sudah tingkat sangat lanjut, sementara aku pending dulu. Kasihan yang lain, tiba-tiba loncat ke materi yang susah :)
Untuk pertanyaan yang lain aku masih bisa jawab.
A. Mengubah alignment label jadi center:
1. Pastikan properti AutoSize diset ke False, atau alignment-nya tidak akan tampak.
2a. Melalui Designer View:
Ubah properti TextAlign menjadi yang diinginkan (ada 9 posisi, pilih sendiri).
2b. Melalui Code View:
namaLabel.TextAlign = ContentAlignment.TopCenter ' ada 9 konstanta, pilih sendiri
B. Membuat teks label menjadi cetak tebal (termasuk style lainnya):
Melalui Designer View:
Perluas properti Font. Silakan set sendiri :)
Melalui Code View:
labelku.Font = new System.Drawing.Font(labelku.Font, FontStyle.Bold)
' Untuk lebih banyak style:
labelku.Font = new System.Drawing.Font(labelku.Font, FontStyle.Bold Or FontStyle.Italic)
Hmm... kalau gitu, topik berikutnya apa nih? Cara membuat label dan textbox tersembunyi saat suatu tombol diklik?
Itu gampang :)
labelku.Visible = False
Hampir semua kontrol punya properti Visible.
Sebenarnya, kalau mau utak-atik sendiri, berarti artikel ini selesai sampai di sini :) tapi aku berbaik hati mengenalkan beberapa kontrol yang paling umum digunakan, dan terakhir adalah cara menghubungkan basis data ke aplikasi kita (ini sebenarnya harus masuk artikel Basis Data, tapi aku berikan yang sangat sederhana saja sebagai pengenalan).
Yang penasaran akan jawaban pertanyaan stash yang aku anggap sulit bisa membuka artikel VB 2008 lebih lanjut (http://forum.rpgfantasy.web.id/index.php?topic=464.0).
Kontrol yang paling umum digunakan adalah sebagai berikut. Aku urutkan sesuai abjad.
Button
Ini sudah kita gunakan sebelumnya.
CheckBox
Berguna untuk memberikan pengguna pilihan yang jawabannya bisa lebih dari satu (misalkan hobi). Untuk mendapatkan apakah checkbox ini ditandai atau tidak, gunakan properti Checked.
ComboBox
Ini adalah kotak yang punya panah di sebelah kanan, kalau diklik muncul pilihan. Untuk mengisi pilihan, lewat Designer View pilih saja properti Items. Kalau lewat Code View, gunakan perintah namaComboBox.Items.Add(). Untuk mencegah supaya pengguna tidak bisa mengetik pilihan sendiri, ubah properti DropDownStyle. Untuk mendapatkan item yang sedang dipilih, gunakan properti ComboBox.SelectedItem.
DateTimePicker
Pernah kan pakai aplikasi yang bisa memilih tanggal dengan memunculkan kalender? Kontrol inilah yang digunakan untuk maksud tersebut. Tanggal yang bisa dipilih bisa dibatasi dengan properti MaxDate dan MinDate. Untuk mendapatkan tanggal yang dipilih pengguna, gunakan properti Value. Awas, Value bertipe data Date!
Label
Juga sudah kita gunakan :)
LinkLabel
Bentuk khusus dari Label, biasanya dibuat untuk hyperlink.
ListBox
Kontrol ini mirip sekali dengan ComboBox, bedanya kontrol ini berupa daftar. Karena itu, propertinya pun mirip dengan ComboBox. Yang beda mungkin ListBox mengizinkan pemilihan jawaban lebih dari satu (diatur di properti SelectionMode), sehingga kalau item yang terpilih lebih dari satu, gunakan properti SelectedItems. Awas, properti ini berupa array Object, jadi mungkin diperlukan iterasi.
MaskedTextBox
Varian kontrol TextBox, ini digunakan untuk memaksa pengguna memasukkan teks sesuai dengan pola (mask) yang sudah dimasukkan sebelumnya. Misalnya, untuk nomor KTP, formatnya harus 00.0000.000000.0000. Dengan MaskedTextBox, kode untuk memaksa input ini sudah dibuatkan otomatis. Untuk mendefinisikan mask, ubah properti Mask. Nilainya dapat diakses dan diubah dengan properti Value.
MonthCalendar
Varian DateTimePicker, ini cuma kalender bulanannya saja. Kurang lebihnya sama dengan DateTimePicker.
NotifyIcon
Penasaran bagaimana sebuah aplikasi bisa membuat ikon sendiri di sebelah jam di taskbar? Atau memunculkan pesan dalam balon teks? Ini kontrolnya :) Berbeda dengan kontrol visual, kontrol ini (dan beberapa kontrol lain) tidak diletakkan di dalam form, tapi di wadah khusus (coba saja masukkan satu ke form). Setting-nya sederhana, coba diutak-atik sendiri :)
NumericUpDown
Pernah lihat kotak yang punya dua panah di sebelah kanan? Kalau diklik, angkanya naik atau turun? Kontrol ini digunakan untuk maksud tersebut. Penambahan (increment) tiap kali panah diklik bisa diatur di properti Increment, sementara nilainya didapat dari properti Value.
PictureBox
Yang ingin mempercantik tampilan dengan menggunakan gambar bisa menggunakan kontrol ini. Gambar bisa diset pada properti Image.
ProgressBar
Sering kan melihat progress bar selagi kita menunggu sesuatu? Gunakan kontrol ini untuk mendapatkan efek yang sama. Nilai maksimum dan minimum, bisa ditebak, ada di properti Maximum dan Minimum. Pada runtime, jangan lupa ubah selalu nilai ProgressBar dengan properti Value.
RadioButton
Sering juga kan melihat kontrol ini? Ada banyak pilihan, tapi yang bisa dipilih hanya satu? Walaupun terdengar aneh, ini adalah bentuk khusus kontrol CheckBox, jadi tahunya kontrol ini dipilih atau tidak ada di properti Checked. Nah, kalau radio button-nya kebetulan ada banyak, kita harus cek satu per satu. Dari namanya? Tentu repot! Tapi, kalau kebetulan hanya ada satu grup radio button pada form, kita bisa gunakan cara ini:
For Each control In Me.Controls
If TypeOf control Is RadioButton Then
If control.checked Then
MessageBox.Show(control.text)
End If
End If
Next
Waduh, apa itu??? Bahasa manusianya begini:
Untuk setiap kontrol di kontrol form ini (Me.Controls)
Jika tipe kontrol adalah RadioButton Maka
Jika kontrol dicek Maka
' Mau ngapain di sini? ;)
Akhir Jika
Akhir Jika
Lanjut
Sementara itu dulu, selanjutnya kita akan masuk ke Toolbox grup Containers.
Perlu contoh penggunaan kah? Aku harap nggak usah yah, contohnya banyak sekali :P
Aku terpaksa kembali ke sintaks dasar VB karena baru ingat ada beberapa perbedaan dengan bahasa lain, seperti yang baru saja ditanyakan stash:
Kutip dari: stashMisalkan aku punya array arrData(3). Di C++ (dan nyaris semua bahasa pemrograman), elemen terakhir yang bisa aku akses adalah arrData[2]. Di VB, kenapa arrData(3) masih boleh diakses?
Jawabannya:
Kutip dari: MSDN, Array Bounds for Visual Basic 6.0 UsersThe number you specify for each dimension in the declaration is the upper bound, and the initial element count is equal to the upper bound plus one.
Bahasa sederhananya, jika ada
arrData(3), maka jumlah elemennya adalah 3 + 1 = 4, dan elemen terakhir yang bisa diakses adalah batas atas itu sendiri, yaitu
arrData(3). Tentu saja, elemen pertama yang dapat diakses tetap
arrData(0).
Lainnya akan kuberikan kalau ingat :P makanya tanya ya kalau ada yang bingung ;)
Aku tambahkan satu topik baru untuk mendukung permintaan stash di topik Basis Data (http://forum.rpgfantasy.web.id/index.php?topic=168.0).
Pernah nemu program yang bisa menampung banyak jendela? Ingat dengan Word 2003? Gimana caranya kita bisa bikin penampung jendela? Nah, VB punya satu form khusus yang disebut Multiple-Document Interface Form, atau lebih sering dipanggil MDI Form. Form ini biasanya memiliki menu, dan di VB yang lebih baru bisa ada toolbar dan status bar. Lalu, gimana cara pakainya?
VB 2008
Tambahkan form baru seperti biasa, tapi kali ini pilih MDI Parent Form. Beri nama sesukanya, lalu klik Add.
Satu form baru akan terbuka, sudah lengkap dengan menu bar beserta "The Six Brothers" (File, Edit, View, Tools, Windows, dan Help), toolbar, dan status bar. Asyiknya, kode untuk menu-menu yang umum dipakai (terutama di menu Windows) sudah dibuatkan :D
Lha kalau mau bikin menu baru? Klik saja di menu bar, lalu ketikkan nama menu yang diinginkan di kotak yang muncul. Lakukan sesukanya sampai didapat susunan menu yang diinginkan. Kalau mau bikin submenu, klik dulu menu yang akan punya submenu, nanti muncul kotak baru.
Misalkan aku mau menu Tambah Barang, yang akan membuka form frmTambahBarang. Buat menunya, lalu ketikkan kode untuk membuka form baru (masih ingat ya? (http://forum.rpgfantasy.web.id/index.php?topic=463.msg3564#msg3564)). Apa yang terjadi? Form frmTambahBarang memang terbuka, tapi kok di luar MDI form kita? Itu karena kita tidak menyuruh frmTambahBarang agar terbuka di dalam MDI form. Lalu bagaimana caranya? Tambahkan saja kode berikut sebelum membuka form yang diinginkan:
formYangAkanDibukaDiDalamMDIForm.MdiParent = Me ' diasumsikan kode ini dipanggil dalam MDI Form
Jalankan ulang. Sekarang form itu pasti akan muncul di dalam MDI form kita. Asyik kan? Silakan berkreasi sendiri dengan menggunakan MDI form ini :D
:o ada pembelajaran LPV juga yah ternyata ;)
sayang telat taunya sih >.< untung lulus :P
btw knp yah crystal report sering hang tanpa sebab ??? :'(
CR berapa? Digabung sama VS berapa? OS?
Wah CR brp lupa.. VS 2003, OS winXP..
Tolong bantu ane dong sob... :(
Lagi pusing nih, gmn caranya memasukkan data dari form lain ke form utama? Contohnya isi listview dari form A bila di klik 2 kali maka isi fieldnya akan masuk ke dalam textbox form B....
Um kebetulan di komputer tidak ada VB (dan memang sudah pindah ke C#), tapi harusnya cara kerjanya sama (asumsi aplikasinya bukan MDI):
1. Buat satu variabel di tingkat form (istilahnya field) di form pertama.
1a. Kalau ingin menjaga keamanan variabel tersebut, deklarasikan Private, kemudian buatkan properti.
1b. Kalau memang data yang dikirim tidak krusial, deklarasikan Public.
Misalkan saja nama variabelnya x.
2. Ambil data dari form pertama, masukkan ke variabel yang baru saja dibuat.
3. Di form kedua, tinggal panggil form pertama dan akses variabelnya. Ini hanya berlaku kalau form kedua adalah anak dari form pertama. Agak lupa kode-nya, mungkin kira-kira begini:
Dim myParent As Form1 ' atau apapun nama form pertama
myParent = Me.Parent
' Dari myParent ini variabel x bisa diakses
Mudah-mudahan bisa (nyobanya di C# sih) :)
Oh... Ok2, ane coba dulu sob... :D Soalnya ini VB 2008 ane pakenya... ;)
terus "x"nya di deklarasikan sebagai apa sob? Integer? String? Atau apa? Maaf banyak tanya, soalnya masih pemula bgt di VB 2008... :D
Seperlunya, kalau datanya ternyata angka biasa ya Integer, kalau pecahan ya Double, kalau teks ya String :)
trus "x"nya di taruh dmn? :(
Bingung bgt...
Di form A atau Form B? (Form A yg ad listviewnya, Form B yg ad textboxnya)
Aku agak nggak ingat struktur form di VB, tapi di Form1.vb (asumsi namanya tetap begitu):
Public Class Form1
' ------------------------
' Letakkan di sini
Public x As Integer ' atau bikin Private dan buatkan property-nya
' ------------------------
Public Function Form1()
...
End Function
...
End Class
Ada cara lain sebenarnya, menggunakan bantuan modul. Semua variabel di tingkat modul bisa diakses dari form manapun.
itu di form yg mau diisikan isi item listviewnya ya? Alias Form B?
Itu di form A (yang ada listview-nya). Form B nanti tinggal ambil nilainya saja :)
berarti seperti ini ya?
di form B
txtnamab.Text = [form_A].x
di form A
dim x as integer = 0
???
EDIT:
Sori diedit dikit, sepertinya ada yang berubah jadi BBCode...
Bentar, instal VB 2008 dulu deh, caranya kayanya agak beda dengan C# ini :D
oke2... Btw, ada
FB nd? Lebih enak di FB rasanya... nanti klo ud jadi bisa lgs sharing di sini... ;D
OK2... Ditunggu ya... ;D[/list]
Ada di signature, coba cek di About.me :)
Ternyata seperti ini....
kodingnya dibuat seperti ini..
Private Sub Txtkodeb_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Txtkodeb.KeyPress
If (e.KeyChar = Chr(13)) Then
If Me.Txtkodeb.Text = "*" Then
Dim asa As New caribarang
asa.ShowDialog()
Txtkodeb.Text = asa.ListView1.SelectedItems(0).Text
txtnamab.Text = asa.ListView1.SelectedItems(0).SubItems(1).Text
txtjumlah.Focus()
End If
End If
End Sub
EDIT:
Image-nya kurang tepat, mungkin bisa pakai bantuan imageshack atau yang lain (kebetulan di sini tidak mendukung pengunggahan langsung :))
Yup, kurang lebihnya seperti itu :) ShowDialog akan menyebabkan fokus pindah ke form berikutnya dan kode berikutnya akan ditahan dulu hingga form yang muncul tadi ditutup.
ooohhh gtu... okeylah... Sorry sob, ane baru pemula bgt neh ;D
nih gambarnya sob... :D
http://imageshack.us/photo/my-images/28/32196022983248232191402.jpg/
thx ud bantu! ;D
Ada yg bisa PHP dengan menggunakan VB net 2008 ga? :(
Lagi ada tugas nih.....
Maksudnya gimana ya? PHP kan untuk Web, VB.NET untuk desktop :)