Rabu, 23 Oktober 2013

belajar vb.net

VISUAL BASIC . NET


   Microsoft pada mulanya mengeluarkan suatu bahasa program yang sederhana yang disebut Basic. Kelebihan dari Basic terutama adalah tata-bahasa yang sederhana sehingga mirip bahasa Inggris. Seiring kemajuan computer dan system operasi windows akhirnya dirasakan Basic
banyak kekurangan maka di keluarkan bahasa program baru dengan nama Visual Basic dan disusul dengan Visual C++. Ditambah visual Interdev , paket ini disebut Visual Studio. Visual Basic dan Visual C++ ini memudahkan programer jika ingin membuat program yang jalan/run di
lingkungan system Windows. Hal yang sulit dilakukan jika memakai bahasa program lain misalnya gpp atau gcc.

  Setelah berjalan beberapa tahun paket Visual Studio mengeluarkan versi Visual Studio.Net . Paket .Net(baca dot net) mempunyai beberapa kelebihan yaitu mudah dipakai baik untuk lingkungan windows maupun internet. Selain itu juga mendukung pemograman yang berjalan di
Console (windows dos). Helpnya juga sudah bisa integrated dengan development environment, sehingga jika ada syntax yang kurang dipahami tinggal cari melalui index. Visual .Net ini sudah ada 2 versi yaitu
versi 2002 dan versi 2003. Pada versi 2002 untuk pemograman Visual C++ belum ada form dan control visual tools drag and paste seperti tersedia untuk Visual basic. Versi yang 2003 sudah lengkap baik untuk Visual C++.Net  sama dengan Visual Basic.Net bisa memakai basic controls dengan drag and paste.

  Dalam bahasan kita ini, kita akan mempelajari lengkap Visual Basic namun ditujukan untuk dicompile dengan Visual Basic.Net. Pemograman dilakukan di MDE yang bisa dijalankan dengan click Icon Visual Studio.Net, kemudian buat new project, pilih Visual Basic sebagai project type dan pilih Templates yang dinginkan misalnya Window Application atau Console Application. Atau lainnya yang ada dipilihan. Name dari project dan letak file project yang akan disave juga bisa diatur sebelum click OK.

Sebagai contoh pertama , coba dipilih template Window Application dan project name misal WinSample1 dan directory misal test1 dan click OK. MDE akan membuat Solution WinSample1. Dikanan dari IDE nampak Solution explorer dan folder References dan 2 file, AssemblyInfo.vb dan Form1.vb . Sedang ditengah nampak Form1.vb dalam bentuk Design. Form1 ini jika diclick , maka dikanan bawah dari IDE bisa kita lihat Form1 properties.

  Pemrograman Visual adalah pemrograman Object Oriented. Jika pernah belajar C++ maka object dibuat dari definisi(turunan) suatu class. Class induknya adalah System dengan turunannya  System.Data , System.Drawing, System.XML dan System.Windows. Sedangkan Formnya sendiri adalah turunan dari System.Windows.Forms. Ini nampak di References dari project explorer.

 Kembali ke Form1(select dulu dengan single click kalau belum). Dibaris bawah Solution Explorer kita bisa click View Designer atau View   Code atas Form1. Dalam Designer View, pada Form ini bisa didrag and paste macam-macam standard controls yang disebut Windows Form Toolsbox (nampak pada kolom dikiri MDE). Sedang pada Code view , kita bisa tuliskan code untuk Form ini dan controls2-nya.

  Nah, untuk latihan kita yang pertama ini yaitu WinSample project kita select Form1 dalam Designer View. Lalu pilih misal Button control (ada lambang ab) dan click posisi awal(misal tengah atas) di Form1 lalu drag . Jadilah Button kita yang mana pada kolom properties kita bisa change properties sesuai keinginan kita. Misal text Button1 kita change jadi Start.

 Jika sekarang button Start ini kita double-click maka akan tampil Code view dimana di list code kita :
Public Class Form1
    Inherits System.Windows.Forms.Form

  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As           System.EventArgs) Handles Button1.Click

    End Sub
End Class

Note: harap diperhatikan buat yg baru belajar code baris kata Private adalah nyambung dalam satu baris sampai Button1.Click.  Nampak bahwa Button1_Click object adalah terletak dalam Class Form1 dimana class ini adalah turunan dari System.Windows.Forms.Form. Sementara ini kita nggak usah pusing soal class ini, kita bisa tulis code kita untuk Button1_Click ini di sub Button1_Click. Untuk itu kita buat lagi 1 control di Form (kembali dulu ke Designer view) misalnya Label(lambang A), taruh dibawah button start. Kemudian di Label1 properties text dibuat blank. Nah sekarang kita sudah siap tulis code untuk Button1_Click (double click button Start). Tulis code seperti dibawah ini :

               Private Sub Button1_Click(ByVal sender As System.Object, ByVale As      System.EventArgs) Handles Button1.Click

                               Label1.Text = "This is the text created by clicking Start button."

               End Sub

  Selanjutnya tinggal click Build WinSimple1 di Build menu. Jika tidak ada error di layar build output (bawah), maka tinggal click Start di menu Debug. Setelah Form muncul coba click button Start untuk memunculkan tulisan text tersebut !  Ok, sekarang close WinSample1 ini. Kembali ke Form1 dalam designer view, tambahkan 4 button dikiri dan 3 buah textbox dikanan atas kebawah . Susun button seperti tuts calculator dan perkecil jadi segiempat dan text dirubah masing2 jadi  +, -, * dan /. Agar nampak lebih tegas font dirubah jadi bold dan size 12. Dan name dari button ganti jadi plus, minus, times and devide. Untuk textbox1 sampai 3 ,
name diganti jadi Text1, Text2 dan Text3. Sedang text propertynya ganti 0 dan align di set right. Tujuannya adalah kita akan membuat calculator sederhana. untuk mulai code view , double_click plus button dan muncul code seperti dibawah ini :

               Private Sub Plus_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs)         Handles Plus.Click

      End Sub

Kita buat 3 buah variable misal Num1, Num2 dan Num3. Dan agar variable ini punya scope berlaku untuk sub-routine dari beberapa button maka kita declare diluar sub_routine sebagai berikut. Sekalian didalam routine ditulis code untuk menjumlah nilai pada Text1 dan Text2. Karena Text1.text adalah string, maka perlu diambil value-nya dulu sebelum bisa dijumlah dengan benar.
               Dim Num1, Num2, Num3 As Integer
               Private Sub Plus_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs)         Handles Plus.Click

                               Num1 = Val(Text1.text)
                               Num2 = Val(Text2.text)
            Num3 = Num1 + Num2
            Text3.text = Str(Num3)

    End Sub
   Selanjutnya isikan code utk Sub Minus_Click dan seterusnya seperti diatas dan sesuaikan rumus kurang kali dan bagi masing2 button.

   Aplikasi diatas kalau dirun/start maka akan kelihatan bahwa hasilnya selalu bilangan bulat. Agar bisa menampilkan bilangan pecahan maka variables Num1, Num2 dan Num3 bisa diset sebagai Single atau Double jika perlu high precision:
  Dim Num1, Num2, Num3 As Single

   Nah jika contoh pertama sudah dicoba dan berjalan benar kita coba buat contoh kedua. Sebagai contoh kita yang kedua mari kita buat new project(sebelumnya close dulu WinSample1 Solution), dengan template Console Application. Kita namai ConSample1 Solution. Kali ini tidak ada Form1 melainkan Module1.vb. Karena ini dalam mode console maka tidak disediakan designer view. Cobalah masukan code berikut ke module1.vb

Module Module1

    Sub Main()
        Dim num1, num2 As Integer
        num1 = 3
        num2 = 5
        Console.Write(num1 / num2)
    End Sub

End Module

Nah application kita siap di build jadi ConSample1.exe(click build di Build menu). Untuk run aplikasi ini kita perlu ke dos prompt. Change directory ke tempat kita simpan ConSample1 files lalu cd ke bin. Run aplikasi dengan ketik ConSample1 dan enter. Hasilnya adalah 0.5 . Ternyata hasilnya adalah bilangan pecahan. Hasil pembagian ini oleh VB ditampung di variable double.
   Dari contoh kita diatas, kita lihat ada beberapa topic yang perlu kita bahas secara lebih detail dalam paragraph berikut ini. Selanjutnya jika kita membuat contoh latihan dalam windows application kita beri nama winsamp dan dalam console application kita sebut consamp.

Variables
  Variable adalah tempat menampung isi/value di memory. Yang ditampung adalah data angka. Data angka ini bisa mewakili bentuk2 value lain misal kata maupun tanggal bahkan object. Karena Visual Basic dimaksudkan untuk mempermudah pemrograman maka kita nggak perlu telusuri bagaimana data angka bisa mewakili kata dan sebagainya. Yang perlu diketahui adalah supaya variable bisa menampung data type yang berbeda, memory untuk tiap type mempunyai ukuran memory tertentu. Misal type single butuh memory 32bits atau 4 bytes. Sedang type double butuh 64 bits.Type  

   Variable type bisa dikelompokkan dalm bebrapa kelompok yaitu
Numeric, String, Boolean, Date dan Object.

   Numeric data dibagi lagi atas short(int16), integer(int32), long(int64), single, double dan decimal. Integer hanya menampung angka bulat, sedang lainnya bisa pecahan. Decimal mempunya ketelitian paling tinggi tapi juga butuh memory sebesar 64bits(8bytes).

   String data untuk menampung data kata .Tiap string mampu menampung 2GB data huruf . Dalam VB.Net tiap huruf memerlukan 2 bytes karena memakai unicode. Lain dengan C yang memakai ASCCI yang cukup dengan 1 byte per huruf.

   Boolean data adalah hanya untuk menampung 2 nilai yaitu true atau false.

   Date data untuk menampung tanggal dan jam. Tanggal dan jam saat ini di computer tersimpan di BIOS ROM yang setiap saat bisa diaccess untuk mendapatkan tanggal dan jam saat ini.

   Object data  adalah variable type yang bisa dipakai secara fleksible yang nanti akan bisa dilihat dari contoh pemakaian. Istilah-istilah diatas cukup membingungkan jika pertama kala baca, namun jika sudah sering membuat program maka akan terbiasa dengan istilah-istilah baru tersebut.

Declaration
   Seperti terlihat pada WinSample1, sebelum bisa dipakai, variables perlu di-declare. Berikut adalah beberapa cara declaration yang bisa dipakai:

     Dim Num1, Num2, Num3 As Single
     Dim Value1 As Long, name As String
Declaration bisa juga diikuti dengan assignment misalnya
     Dim name As String = "Achmad Sayudi"
     Dim count As Integer = 25000
Jika kita hanya memerlukan variable 1 character, maka bisa dipakai
     Dim ch As Char = "a"
     Dim cn As Char = "das"
Variable cn karena Char maka hanya d yang tertampung, a dan s tidak
bisa disimpan di variable tersebut.
   Declare date bisa dilakukan sebagai berikut
      Dim myBirthday As Date = #12/30/1989#
               Dim date1 As Date = #6/12/2004 6:25:30 AM#
               Dim date2 As Date = "May 15, 1952"
               Dim sekarang As Date
      sekarang = Now()
Karena variables dalam VB sebenarnya adalah object maka disediakan methode untuk beberapa pemakaian. Misalnya DateInterval.Day yang bisa dipakai dalam DateDiff function:
      Dim days As Long
      days = DateDiff(DateInterval.Day,myBirthday,Now())

Cobalah di ConSample1 sebagai berikut
Module Module1

    Sub Main()
        Dim num1, num2 As Integer
        num1 = 3
        num2 = 5
        Console.WriteLine(num1 / num2) 
        Dim myBirthday As Date = #12/30/1989#

        Dim days As Long
        days = DateDiff(DateInterval.Day, myBirthday, Now())
        Console.Write(days)
    End Sub

End Module

Jika dirun hasil baris kedua adalah selisih hari antara hari ini dan
myBirtday. Agar lebih interactive bisa juga ditulis
                  Console.WriteLine("Jumlah hari sejak lahir : " & days)

  Variables bisa dimanipulasi dengan operator umum seperti +, & .
Misalnya Dim num1, num2 As Integer
               Dim Num3 As Double, X As String
num1 =10
X ="2003"
Console.WriteLine(num1 + X)
menghasilkan 2013
dan Console.WriteLine(num1 & X)
menghasilkan 102003
Perlu diketahui bahwa Console.Write bisa mengenali type data dan menampilkan dengan tepat. Hal ini bisa karena methode-nya menggunakan
tehnik overloading.

Type conversion  
   Pada Windows Application yang kebanyakan memakai controls. Dalam menampilkan data yang kebanyakan text, maka perlu ada conversion. Misalkan integer , untuk ditampilkan misalnya di Label1.text maka
perlu di convers jadi string dengan
   Label1.text = Str (num)
Sebaliknya data di Label.text jika ingin diambil nilai integernya
menjadi
   num = Val (Label1.text)
Karena sering terjadi type conversion dalam program maka VB
menyediakan conversion lengkap untuk semua type yang ada yaitu CBool,
CInt16, CInt32 , CStr dst.
Misal Dim year As String = "1980"
      Dim num1 As Integer
maka  num1 = CInt32(year)
akan mendapatkan angka 1980 dalam type integer 32 bits. Maka perlu
diperhatikan jika data yang diconversi awalnya menempati memory 32
bits diconversi menjadi data memory 16 bits maka ada kemungkinan akan
ada pembulatan jika itu pecahan.
   Jika didalam program kita ingin mengetahui type suatu variable bisa
dengan
 num.GetType() maka hasilnya adalah Integer
If num3.GetType Is GetType(System.Double)
adalah mengecheck apakah num3 benar type double.
Selain GetType() disediakan juga GetTypeCode dimana hasilnya dalam
code numeric (int16)
jika num adalah int16 maka
num = num3.GetTypeCode()  menghasilkan num = 14(jika num3 type double)
Untuk melihat code numeric ini cobalah tampilkan dengan Console.Write
(var.GetTypeCode()) dengan mendeclare var untuk berbagai type
variable .

Variables Lifetime dan Scope
  Seperti dalam C ,scope dari variables ini tergantung dimana variable ini di-declare. Jika di-declare diluar sub-routine tapi didalam Form1 module misalnya maka variable ini berlaku di seluruh module Form1. Jika di-declare didalam salah satu sub-routine maka scope variable ini
hanya berlaku di dalam sub-routine tersebut. Jika ingin berlaku diseluruh bagian dari project, maka declare di suatu module dan beri prefix Public. Sebaliknya jika menginginkan suatu variable tidak bisa diaccess di luar module maka pakai prefix Private.
  Lifetime berkaitan juga seperti diatas, jika suatu variable dideclare lokal untuk suatu sub-routine maka variable tersebut hanya mempunyai lifetime selama program sedang process sub-routine.Begitu selesai sampai end sub maka memory tempat menampung data variable tersebutkan se-olah2 hilang. Hal ini karena tempat/alamat dari memory tersebut tidak diingat/disimpan lagi. Namun jika data variable ini ingin lifetimenya tidak habis bisa juga memakai prefix Static. Hanya perlu diingat bahwa memory static jangan sampai datanya tertulis oleh suatu sub-routine yang tidak sengaja memakai nama variable ini. Dalam hal ini program berjalan tanpa error tapi hasilnya bisa tidak sesuai dengan yang diinginkan.  

  Constant

  Selain variable type memory VB mengenal juga Constant. Dalam program sering kita mempunyai data yang harus tetap maka kita declare sebagai constant. Cara declare sebagai berikut :

 Const size1 As Int16 = 2000
maka size1 mempunyai nilai tetap sebesar 2000
 Const pi As Double = 3.14159265358979
 Const theCode = "s234k332~"
jika diinginkan constant ini berlaku public
 Public Const theCode = "s999h765<>"

   Array
  Dalam menangani data yang banyak kita perlu mengelompokan data. Misalnya data murid disekolah atau data anggota suatu club. Array yang sederhana misal   Dim name(20) As String
Maka ada 20 variable string yaitu name(0) sampai name(19). Kita bisa memberikan nilai name(2)= "premium", name(3) = "optimal" dsb.
  Untuk kelompok yang lebih banyak bisa dipakai structure misal :
Structure member
  Dim name As String
  Dim ID As String
  Dim fee As Single
End Structure
maka kelompok data ini bisa dibentuk dengan
  Dim student(40) As member
akan tercipta 40 student data dengan masing2 3 sub-data.
  student(12).fee = 65000.00
menyatakan fee student ke 13 adalah sebesar 65000.00
  Array bisa di-initialised dengan nilai awal misal
Dim Hari() As String = ["Minggu","Senin","Selasa" ....]

   Methode
   Karena variable kita adalah object maka tersedia methode dalam VB
yang bermanfaat dalam program. Contoh pemakaian methode seperti GetType() sudah diberikan sebelum ini. Berikut contoh yang sering kita perlukan yaitu format. Data yang ingin ditampilkan dimonitor/printer sering berupa text/string. Misalnya nilai uang
  Dim payment As Single = 7563.25
  Dim text As String
  text = payment.ToString("C")
disini variable payment memiliki methode ToString(format), dimana "C" adalah format Currency.Agar lebih jelas kita open WinSample1 , lalu tambahkan satu textbox beri nama price, text = 0 dan text align = right. Dan 1 button dan beri name misal CheckPrice. Lalu tuliskan code seperti dibawah ini setelah double_click button CheckPrice .

    Private Sub CheckPrice_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles CheckPrice.Click
        Dim payment As Single = 7563.25
        Dim text As String
        text = payment.ToString("C")
        price.Text = text
    End Sub

Cobalah ganti "C" dengan "Rp ###,###,###.##"
Selain C formatter lain adalah N(number),G(general,F(fixed-point),E(scientific) dan X(hex number).

Selain format string juga ada format date (untuk detail bisa lihat format function dates di help). Contoh pemakaian format date,Dim myBirthday As Date = #12/30/1989# Console.WriteLine(myBirthday.ToString("D"))

   Conditional Branching
  Kesamaan lain dengan bahasa program seperti C adalah VB mempunyai lengkap pengaturan test condition dan percabangan juga. Test condition yang disediakan adalah
  If .. Then..
  If .. Then.. ElseIf
  Select Case
Sedang percabangannya
  For .. Next
  Do.. Loop
  While ..
  Contoh berikut ini bisa memberikan gambaran pemakaian :
Misalkan result adalah hasil ujian
  Dim text As String
        text = "failed"
        If result > 80 Then
            text = "excellent"
        ElseIf result > 65 Then
            text = "good"
        ElseIf result > 55 Then
            text = "passed"
   End If
  Cobalah test code diatas di winapplication sebagai latihan. Buatlah 2 buah textbox dan 1 button. textbox yang satu untuk mengisi result dan satunya untuk menampilkan text dengan click button. Jika mengalami kesulitan dan mau contoh lihat WinSample12.sln  .Misalkan result = 80 maka if yang pertama tidak terpenuhi maka dicari ke elseif berikut, ternyata memenuhi maka text dari failed menjadi good. Elseif yang ketiga tidak dicheck karena code kita langsung ke End If. 
  Contoh penggunaan select case
  Dim text As String
        Select Case Now.DayOfWeek
            Case DayOfWeek.Sunday
                text = "Ini hari libur."
            Case DayOfWeek.Wednesday
                text = "Rabu . Ini hari kerja."
        End Select
        Label2.Text = "Hari ini hari " & text

Code lengkap ada di WinSample12.sln . Untuk hari2 lain, silahkan lengkapi sendiri sample diatas. Dalam case bisa dipakai test > atau >=  , <>, <, < dan sebagainya.

   For .. loop mirip dalam C, beda di tata-bahasa saja
   Dim i As Integer
        For i = 5 To 20 Step 5
            Console.WriteLine(i * i - 200)
        Next i
WriteLine menulis untuk i=5, 10, 15 dan 20 . Jika step dihilangkan
maka default adalah nambah 1.

Loop yang kedua adalah do..while
  Dim destination() As String =
{"Jakarta", "Bandung", "Surabaya", "Denpasar",NULL}
  i = 0
  Do While (i < 4)
            Console.WriteLine(destination(i))
            i += 1
        Loop


Sedang code berikut sama hasilnya dengan diatas 
                 i= 0
                 Do Until (i = 4)
                     Console.WriteLine(destination(i))
            i += 1
        Loop

Penggunaan conditional test bisa memakai logika and, or atau lainnya
seperti
   If (i < 4) and  (i > 1)  maka yang berlaku adalah i==2 dan 3 
   If (i < 2) or (i = 3) artinya jika i=0, i=1, dan i =3

contoh :
i = 0
        Do Until (i = 4)
            If (i = 2) Or (i = 3) Then Console.Write("# ")

            Console.WriteLine(destination(i))

            i += 1
        Loop

Kelihatan If nggak perlu diberi End If karena loop sudah mewakili.

While .. bisa dipasangi dengan End While
     i = 0
    While (i<4)
      Console.WriteLine(destination(i))
            i += 1
     End While

Gabungan dari loop dan condition-test bisa menciptakan nested loop , sehingga macam2 condition yang diinginkan bisa dibuatkan code-nya. Selain itu jika suatu condisi terjadi dan kita ingin loop berhenti, maka bisa dipakai Exit. Exit Function, Exit For, Exit While dan Exit Do bisa dipakai sesuai dengan loop yang ada.

   Procedure

   Yang dimaksud dengan procedure adalah potongan code yang mengerjakan sesuatu yang bisa sering dipakai oleh beberapa bagian dari program. Misalnya kita bisa membuat procedur untuk menghitung selisih hari antara 2 tanggal. Sehingga jika diperlukan kita tinggal memanggil/call dari dalam program dan bisa dipakai berulang-ulang. Bahkan kita bisa copykan procedur ini ke module lain/ project lain jika diperlukan.
  Dalam VB procedure ini bisa merupakan sub-routine atau function. Kita sudah beberapa kali membuat sub-routine yang dibuat otomatis jika kita double-click suatu button atau box. Perbedaannya dengan function adalah, function bisa diharapkan mempunyai return. Artinya jika
dipanggil function menghasilkan suatu nilai bisa string, numeric atau lainnya tergantung code di function yang kita buat.
   Sub-routine
   Pemakaian sub-routine adalah dengan syntax sub nama_routine(arg,arg)dan diakhiri end sub. Arg artinya argument/parameter dalam C adalah nilai/value yang ingin kita process melalui routine ini. Misal jika kita ingin routine ini menampilkan isi suatu silinder, maka arg1 adalah radius dan arg2 adalah tinggi.

Sub Syl__Volume(ByVal R As Double, ByVal H As Double)
        Dim Vol As Double
        Vol = 3.14159 * R * R * H
        Console.Write(Vol)
    End Sub
Routine diatas bisa dipaste ke atasnya sub main(), jika ingin memanggilnya cukup ketikkan di dalam sub main () dimana rad dan height adalah numeric sebaiknya single atau double variable.
    Syl_Volume(rad,height)
ByVal pada argument artinya variable ini adalah copy sehingga rad dan height tidak bisa berubah nilainya, tapi R dan H bisa berubah kalau mau(dan perlu diingat begitu call selesai R dan H hilang dari memory).

   Function
  Pada function kita bisa mendapat return. Sehingga contoh diatas bisa
dibuat demikian
    Function Syl_Volume(ByVal R As Double, ByVal H As Double) As Double

        Return(3.14159 * R * R * H)

    End Function

Jika ingin ditampilkan tinggal
    Dim vol As Double
    vol = Syl_Volume(4.2 , 5 )
    Console.Write ( vol)

4.2 adalah radius dan 5 adalah height. Sedangkan As Double dibelakang kurung menandakan function ini ada return berupa type double. Jika diinginkan type lain misalnya single tinggal ganti double dengan single. Return dari function bisa satu nilai, jika diinginkan lebih dari 1 parameter yang bisa dikembalikan oleh function ada tehnik lain yang akan dibahas berikut ini.

Sebetulnya pemakaian routine dan function ini sudah sering dalam VB.Dalam pemrograman visual studio ini disediakan routine dan function built_in yang sangat lengkap.  Karena routine adalah termasuk function maka selanjutnya kita pakai sebutan function saja, kecuali yang dimaksud adalah sub_routine VB secara khusus. Jadi pelajaran mengenai function ini juga membantu kita memahami bagaimana memakai function yang built_in.

   Passing Arguments
   Jika kita lihat kembali function kita diatas nampak bahwa argument R dan H ada kata ByVal, ini dimaksudkan yang diberikan ke function adalah value. Maksudnya adalah jika diandaikan argument itu adalah kotak penyimpan(ingat bahwa argument adalah data dan data memerlukan
tempat/bisa memory atau sejenisnya) .Jadi byval bisa diartikan copy dari data yang diberikan, dan ini secara default diisi oleh wizard. Jika diinginkan lain, maka bisa dipakai byref. ByRef ini memberikan data asli tanpa dicopy dulu, sehingga data tersebut jika dirubahdidalam function, maka data tersebut ikut berubah setelah function selesai dipanggil.
  Kita coba test dengan contoh program consamp13 .

 Module Module1
    Function Testval(ByVal A As Integer, ByVal B As Integer) As Integer
        A += 3
        B += 5
        Return (A * B)
    End Function
    Function Testref(ByRef A As Integer, ByRef B As Integer) As Integer
        A += 3
        B += 5
        Return (A * B)
    End Function
    Sub Main()
        Dim Num1, Num2, Num3 As Integer
        Num1 = 7
        Num2 = 5
        Num3 = Testval(Num1, Num2)
        Console.WriteLine("Num1 = " & Num1 & "  Num2 = " & Num2 & "  
Num3 = " & Num3)
        Num1 = 7
        Num2 = 5
        Num3 = Testref(Num1, Num2)
        Console.WriteLine("Num1 = " & Num1 & "  Num2 = " & Num2 & "  
Num3 = " & Num3)

    End Sub

End Module

 Jika code diatas dibuild kemudian di run di Dos prompt , tampak bahwa setelah function kita call , untuk passing ByVal nilai argument Num1 dan Num2 tidak berubah, sedangkan jika dipanggil dengan ByRef,variables berubah setelah function di-call. Perlu diketahui bahwa pemakaian ByVal atau ByRef adalah sesuai kebutuhan, dalam 1 function bisa ber-macam2 combination diijinkan.
  Dengan tehnik passing ByRef kita bisa memprocess beberapa argument sekaligus untuk mendapatkan beberapa return berupa nilai argument yang telah kita process tersebut.  Procedure bukan hanya bisa process variables sebagai arguments tapi juga object(misalnya Button1.Text ). Argument object ini diperlakukan sebagai argument ByRef sekalipun ditulis dengan ByVal !

    Event Handler.
   Dalam windows, kita selalu berhubungan dengan event misal button_click. Untuk mengatur event ini disebut event_handler kita memakai sub routine karena nggak memerlukan return. Dan yang sering kita process adalah sender sebagai object dan e sebagai action seperti berikut
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)               Handles Button1.Click

               End Sub
Dalam visual programming, potongan code diatas otomatis dibuat jika kita double_click Button1 ! Events yang sering kita temui misalnya mouse event. Code berikut ini adalah contoh code untuk event MouseUp dan MouseDown.

Private Sub Button1_MouseDown(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
        Label1.Text = "Button click at " & e.X & "' " & e.Y

End Sub
Private Sub Button1_MouseUp(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
        Label2.Text = "Button release at " & e.X & "' " & e.Y

End Sub

Selain mouse bisa juga kita program untuk event KeyDown atau KeyUp
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

End Sub

   Named Arguments
Argument umumnya diisikan dengan urutan seperti ditulis di procedure.
Namun jika diinginkan bisa juga dengan nama argument tanpa perlu
sesuai urutannya seperti berikut
Private Sub Client(ByVal Name As String, ByVal Telp As String
               TextBox1.Text = Name
      TextBox2.Text = Telp

End Sub
Kita bisa call procedure Client dengan
  Client(Telp:="021-4532345", Name:="Martha K.")

    Unknown number of Arguments
Jumlah argument yang ingin di pass melalui procedure bisa tidak tentu
jumlahnya. Hal ini bisa dilakukan dengan paramarray seperti code
berikut
Sub AddName(ByVal ParamArray NameArray() As Object)
        Dim x As Object
        For Each x In NameArray
            ListBox1.Items.Add(x)
        Next x
End Sub
 Call sub diatas dilakukan misalnya
AddName ( "Jakarta", "Bandung", Semarang", "Surabaya")

Demikianlah hal-hal yang penting mengenai procedure mengakhiri tulisan ini di bab1 .Tentu saja masih banyak hal lain mengenai topic diatas yang bisa dipelajari di help dengan lebih lengkap.