VISUAL BASIC.NET - IbrahimCayiroglu.Com

Transkript

VISUAL BASIC.NET - IbrahimCayiroglu.Com
VISUAL BASIC.NET
ÖRNEK 1:Tamam butonuna basıldığında “MERHABA” mesajını veren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
MsgBox(" Merhaba ")
End Sub
ÖRNEK 2: Aşağıdaki çıktıyı veren programı yazınız.
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As
System.EventArgs)
MsgBox("Merhaba " & TextBox1.Text)
End Sub
ÖRNEK 3: Aşağıdaki çıktıyı veren programı yazınız.
Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As
System.EventArgs)
MsgBox("Toplam = " & Val(TextBox1.Text) + Val(TextBox2.Text))
End Sub
ÖRNEK 4: Aşağıdaki çıktıyı veren programı yazınız.
Private Sub Button1_Click_3(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
MsgBox(TextBox1.Text & " Sen " & 2007 - Val(TextBox2.Text) & "
Yaşındasın")
End Sub
ÖRNEK 5: Aşağıdaki çıktıyı veren programı yazınız.
Private Sub Button1_Click_4(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Label3.Text = " Sayıların Toplamı = " & Val(TextBox1.Text) +
Val(TextBox2.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Label3.Text = " Sayıların Farkı = " & Val(TextBox1.Text) Val(TextBox2.Text)
End Sub
ÖRNEK 6: Aşağıdaki çıktıyı veren programı yazınız.
Private Sub Button1_Click_5(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Label3.Text = Val(Label3.Text) + Val(TextBox1.Text)
End Sub
ÖRNEK 7: Aşağıdaki çıktıyı veren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim isim As String
Dim soyisim As String
isim = TextBox1.Text
soyisim = TextBox2.Text
Label3.Text = "Merhaba " & isim & " " & soyisim
End Sub
ÖRNEK 8: Aşağıdaki çıktıyı veren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim s1, s2, sonuc As Integer
s1 = Val(TextBox1.Text)
s2 = Val(TextBox2.Text)
sonuc = s1 + s2
TextBox3.Text = sonuc
End Sub
Örnek: Şekildeki gibi bir çıktı verecek programı yazın
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
Dim Adsoyad As String
Dim Vize, Final As Integer
Dim Ortalama As Double
Adsoyad = TextBox1.Text
Vize = Val(TextBox2.Text)
Final = Val(TextBox3.Text)
Ortalama = Vize * 0.4 + Final * 0.6
If (Ortalama >= 60 And Ortalama <= 100 And Final >= 50) Then
ListBox1.Items.Add(Adsoyad & ": " & Ortalama)
ElseIf (Ortalama >= 0 And Ortalama < 60 Or Final < 50) Then
ListBox2.Items.Add(Adsoyad & ": " & Ortalama)
Else
MsgBox("Hatalı işlem")
End If
End Sub
DEĞİŞKENLER VE VERİ TİPLERİ
Değişkenler bir bilgiyi hafızada tutmak için kullanılır. Değişkenlerin tanımlanma zorunlu istenirse kapatılabilir.
Bunun için kodların en başına Option Explicit Off deyimi kullanılır. Fakat kesinlikle değişkenlerin tanımlanma
zorunluluğunun kapatılmaması tavsiye edilir. Aşağıdaki örneği inceleyin
Örnek: Bir butonun Click’ne aşağıdaki kodları yazın. Option Explicit off ifadesini tüm kodların en
yukarısına yazın.
Option Explicit Off
Public Class Form1
....
Private Sub Button1_Click(...)
a = 5
b = 6
aratoplam = 1000
geneltoplam = a * b + aratplam
MsgBox(geneltoplam)
End Sub
End Class
Burada dikkat edilirse yanlışlıkla “aratplam” ifadesi kullanılmıştır. Bu ifade degişken tanımlama zorunluluğu
kapatıldığı için hata vermemiş ve sonucu 30 olarak göstermiştir. Eğer degişken tanımlama zorunlu olsaydı bu
ifade tanımlanmamış olacağı için hata verecekti ve böylece programdaki yanlışlık düzeltilecekti. Bu nedenle
kesinlikle değişkenleri tanımlayın.
DEĞİŞKEN TANIMLAMA: VB de değişken tanımlamaları Dim ile yapılır. Şu şekilde kullanılır.
Dim degişken_ismi As tip
Burada degişken_ismi ni biz veririz. Tip ise aşağıdaki değişken tiplerinden birisi olabilir.
Sayısal Tipler: Byte, Short, Integer, Long, Single, Double, Decimal
String Tipler: String, Char
Mantıksal Tipler: Boolean
Tarih Tipi: Date
Birden fazla degişkeni tek bir satırda da tanımlayabiliriz.
Dim x,y,z As Integer a,b As String
Eğer Dim ifadesinden degişkenin tipi verilmezse degişken tüm degişkenleri içine alan Variant tipinde tanımlanır.
Fakat Variant degişkenler programı çok yavaşlatır kullanılması tavsiye edilmez.
Dim x,y,z
VB de degişkenler bir nesne olarak işlem görür. Yani tanıladığınız bir String, string tipinde bir nesnedir ve string
sınıfının bütün özellik ve metodları değişken üzerine uygulanabilir. Bu konu ileride nesneye yönelik
programlamada ele alınacaktır.
Örnek: Örnegin string tipinde bir degişken tanımlayın ve bu degişkene bir isim atayın. Daha sonra
isimin boyunu ekranda string nesnesinin özelliğini kullanarak gösterin. (özellik ve metodlar “.”
Koyunca kendiliğinden çıkar).
Private Sub Button1_Click(...)
Dim isim As String
isim = "Ali"
MsgBox(isim.Length)
End Sub
Bu örnekte sonuç 3 olarak çıkar.
Degişken üzerinde işlem yapmak için o degişkenin tanımlandığı sınıfa ait özellikler kullanılabileceği gibi, o
sınıfa ait fonksiyonlarda kullanılır. Aynı örneği Strings sınıfına ait Len() fonksiyonu kullanarak yapalım.
Örnek: Örnegin string tipinde bir degişken tanımlayın ve bu degişkene bir isim atayın. Daha sonra
isimin boyunu ekranda string nesnesinin özelliğini kullanarak gösterin. (özellik ve metodlar “.”
Koyunca kendiliğinden çıkar).
Private Sub Button1_Click(...)
Dim isim As String
isim = "Ali"
MsgBox(Len(isim))
End Sub
Yine sonuç 3 çıkar.
SAYISAL TİPLER: Tüm sayısal değişken ve aralıklarını tablo şeklinde gösterelim.
Adı
Boolean
Hafıza(Byte)
? 2 byte
Byte
1 Byte
Short
2 Byte
Integer
4 Byte
Long
8 Byte
Single
4 Byte
Double
8 Byte
Decimal
14 Byte
Alabileceği değer aralığı
1 (true) yada 0 (false) degerlerini alır
0
255
-32.768
+32.767
-2.147.483.648
+2.147.483.647
-9.223.372.036.854.775.808
+9.223.372.036.854.775.807
± 3,402823 x1038
± 1,401298 x 10-45
± 1,79769313486232 x10308
± 4,94065645841247 x 10-324
±79.228.162.514.264.337.593.543.950.335
±7.9228162514264337593543950335
Tanımı
1 ve 0 değerlerini alır.
İşaretsiz tam sayı tipidir.
İşaretli tam sayı tipidir.
İşaretli tam sayı tipidir.
İşaretli tam sayı tipidir.
Ondalık sayı tipidir.
Ondalık sayı tipidir.
Tam sayılar için
Ondalık Sayılar için
Sayı büyüklüğünün önemli olduğu durumlarda Single ve Double kullanılır. Basamak sayısının önemli olduğu
durumlarda ise Decimal kullanılır. Yukarıda dikkat edilirse Single 7 basamaktan sonra, Double ise 15
basamaktan sonra sayının gerisini 10 üzerili olarak saklamaktadır. Oysa Decimalda ise basamak sayısı 29
basamağa kadar tutulabilmektedir. Bunun için aşağıdaki örneği yapın.
Örnek: 12345678901234567890 sayısını Single, Double ve Decimal değişken kullanarak üzerine 5
sayısını ekleyip toplayınız.
Private Sub Button1_Click(...)
Dim x As Single, y As Double, z As Decimal
x = 1234567890123456789
y = 1234567890123456789
z = 1234567890123456789
x = x + 5
y = y + 5
z = z + 5
MsgBox("x=" & x)
MsgBox("y=" & y)
MsgBox("z=" & z)
End Sub
Görüleceği gibi çıkan sonuçlar şöyle olacaktır.
x=1,2345678E+18 = 1234567800000000000
y=1,234567890123456E+18=1234567890123456000
z=12345678901234567894
x ve y sonucu yanlış verdi fakat z doğru çıktı. Bu nedenle hassa matematiksel işlemlerde ve parasal işlemlerde
Decimal kullanılmalıdır.
Sınır Aşımı: Girilen sayı değerleri değişkenin sınırları dışına çıktığında “OverFlowException” hatası verir. Bu
tip hataların önüne geçmek için uygun tiplerde tanımlamalıyız yada Try-Catch bloğun yazarak oluşacak hatayı
yakalamalıyız. Aşağıdaki örneği uygulayınız.
Örnek: Byte olarak tanımlanan bir değişkene önce 1 den 500 kadar sayıları yükleyeme çalışın. Sayı
255’i geçtiğinde hata verir. Hata mesajını göstermeden kullanıcıya “sayı 255’i aşıyor” uyarısı veren bir
program yazın.
Private Sub Button1_Click(...)
Dim i As Integer
Dim x As Byte
Try
For i = 1 To 500
x = i
Next
Catch
MsgBox("Sayı 255'i aşıyor")
End Try
End Sub
Oluşan hatanın kullanıcıya gösterilmemesi ve bir uyarı verilmesi için burada Try-Catch-End Try blogu
kullanılmıştır. Hata oluşma ihtimali olan kodlar Try-Catch arasına, Uyarı mesajı ise Catch-End Try arasına
yazılmıştır.
Sayılarla İlgili Fonksiyonlar ve İşlemler: Sayılarla ilgili bazı standart fonksiyonlar ve işlemler aşağıda
özetlenmiştir.
•
•
•
•
IsNumeric(değişken): Bu fonksiyon verilen değişkenin bir sayı olup olmadığını bildirir. Değişkenin içeriği
sayı ise geri dönen değer True olur.
Val(string): Bu fonksiyon stringin içerisindeki bilgiyi sayıya çevirir. İçinde geçersiz karakter bulursa
bulduğu yere kadar çevirir.
Fix(sayı): Sayının virgülden sonraki kısmını direk atar.
Math.Round(sayı,basamak_sayısı): Virgülden sonra kaç basamak yuvarlatmak isteniyorsa bu fonksiyon
kullanılabilir. 0 verilirse virgülden sonraki basamakların hepsi yuvarlatılır.
Örnek: Eski Türk lirasında 100000 TL nin altındaki paraların bir değeri yoktur. Girilen bir küsüratlı bir
paranın 100000 altındaki değerlerini yuvarlatın.
Private Sub Button1_Click(...)
Dim para As Long
para = Val(TextBox1.Text)
para = (Math.Round(para / 100000, 0) * 100000)
Label1.Text = para
End Sub
Bunu gerçekleştirmek için sayı 100000 bölünür ve virgüllü hale getirilir. Virgülden sonraki sayılar
yuvarlatıldıktan sonra tekrar 100000 çarpılır. Program çalıştırılırsa 12345678912 sayısı 12345700000 olarak
çıkar.
•
Format(sayı,biçim): Sayıları istediğimiz biçimde göstermeye yarar. Örnek: Format(Val(TextBox1.Text),
“##,## TL”) kodu girilen sayıyı ekranda her 3 haneye virgül atar ve sonuna TL yazar.
Örnek: Bir malın birim fiyatını Text kutusuna yazarken hatalı yazımı önlemek için her 3 basamakta
bir nokta yazsın ve rakamlar sola yaslı olsun. Aynı zamanda her yazılan rakam sayının sonuna yazılsın
(otomatik olarak sona gitsin). Bu sayı o malın adeti ile çarpıldığında sonucu yine noktalı göstersin ve
sonuna TL ifadesini eklesin. Rakam yerine harf girildiğinde uyarı versin.
Private Sub Button1_Click(...)
Try
Label5.Text = Format(CDec(TextBox2.Text) * CInt(TextBox3.Text), "##,## TL")
Catch
MsgBox("Geçersiz sayı girildi")
End Try
End Sub
Private Sub TextBox2_TextChanged(...)
Try
TextBox2.Text = Format(CDec(TextBox2.Text), "##,##")
TextBox2.SelectionStart = TextBox2.Text.Length
Catch
End Try
End Sub
Burada Text kutularına yazılan string ifadeyi sayıya çevirmek için Val kullanılmamıştır. Çünkü Val binlik
basamak olarak virgül kabul eder. Halbuki türkçede nokta kullanılır. Bunun yerine Windows’un türkçe ayarlarını
tanıyan Cval, CDbl, Cdec dan biri kullanılır
Örnek: Dışarıdan girilen bir sayı Türkçe para gösterim sistemine dönüştürüp bize göstersin
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim sayi As Double
Dim para As String
sayi = Val(TextBox1.Text)
para = Format(sayi, "###,###.##TL")
TextBox2.Text = para
End Sub
•
Rnd(): Bu fonksiyon 0 ile 1 arasında rastgele sayı üretir.
MsgBox(Rnd()
MsgBox(Rnd() * 100)
MsgBox(Int(Rnd() * 100))
0 ile 1 arasında rastgele bir sayı
0 ile 100 arasında rastgele bir sayı
0 ile 100 arasında rastgele bir tam sayı
Genel formül: Rnd*(b-a) + a
a ile b arasında rastgele bir sayı.
Bu fonksiyonlar denenirse her seferinde aynı sayıları ürettiği gözlenir. Bunu önlemek için Randomize()
fonksiyonu kullanılır. Randomize fonksiyonu başlangıç referans sayısını belirler. Bunuda sistemin saatinden alır.
Örnek: 5 ile 15 arasında rastgele tamsayı üreten bir program yazın.
Private Sub Button1_Click(...)
Randomize()
MsgBox(Int(Rnd() * (15 - 5) + 5))
End Sub
Ödev: 0 dan 100 kadar bir rastgele sayı tutacak ve kullanıcının bu sayıyı bulmasını isteyecek basit bir
sayı bulma oyunu hazırlayın. Bunu adam asmaca oyununa benzeterek resimli olarak yapıp süsleyin.
Örnek ÖDEV: Formun üzerine 1 tane buton ve 1 tane label ekleyin. Butona tıklayınca Rastgele şu şekilde bir
sayı atsın. 23.4565656 gibi. Daha sonra bu sayıyı dönüştürüp 23.46 TL olarak göstersin.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Randomize() 'Zamana bağlı olarak her seferinde rastgel sayı atar.
'Label1.Text = Int(Rnd() * 100) 'Tam sayı kısmını alır.
'Label1.Text = Fix(Rnd() * 100) 'Tam sayı kısmını alır.
'Label1.Text = Math.Round((Rnd() * 100), 2)
'Label1.Text = Format((Rnd() * 100), "##.## TL")
'Label1.Text = Format("{0:c}", (Math.Round(Rnd() * 100, 2)))
Dim a As String = (Rnd() * 100)
Label1.Text = a
Dim Dizi As String() = a.Split(New Char() {","c})
Dim parca As String
For Each parca In Dizi
ListBox1.Items.Add(parca)
Next
Dim sayi1 As String = parca(0)
Dim sayi2 As String = parca(1)
Dim yenisayi2 As Integer = Val(sayi2)
yenisayi2 = Math.Round(yenisayi2, 2)
Label2.Text = sayi1 & yenisayi2 & " TL"
End Sub
STRING TIPLER
Stringler üzerinde sayısal işlem yapılamayan ifadelerdir. Char ve String tip olmak üzere iki kısıma ayrılır.
Char: İki baytlık bir karakter veri tipidir. İçinde sadece bir karakter barındırır. Fazla sayıda karakter ataması
yapılırsa ilk karakteri dikkate alır. Geriye doğru silme yada Enter gibi Ascii kodu içinde bulunan karakterleride
Chr() fonksiyonuyla birlikte kullanabilirsiniz. Örneğin enter tuşu için Chr(13) kullanabilirsiniz.
Dim c1,c2, as Char
c1=”A”
c2=Chr(65)
Msgbox(c1)
Msgbox(c2)
String: Karakter sınırı verilmezse 2 milyar karaktere kadar alabilir. İçerisine aldığı karakterler Unicode
Stringlerdir. Unicode stringler uzak doğu dilleride dahil tüm dillerin karakterlerini kapsamaktadır.
STRİNGLERLE İLGİLİ METODLAR: VB.Net de Stringler diğer tipler gibi birer nesnedir. String tipi
değişkenin adı yazılıp nokta konduğunda o string üzerinde yapılabilecek özellik ve metodların (işlemlerin) bir
listesi çıkar. Stringlerin iki adet özelliği (length, Chars) vardır. Diğerleri metoddur (string üzerinde yapılabilecek
işlemleri gösterir).
•
•
Length(): Bu özellik Stringin uzunluğunu verir. [string.Length() ]
Chars(): Bu özellik Stringin istenen karakterini verir. İndis 0 dan başlar. [string.Chars(2) ]
Örnek: Bir TextBox’ın içine yazılan bir metindeki kelimeleri arada boşluk, virgül ve noktaları
araştırarak yine aynı TextBox’ın içinde alt alta sıralasın.
Private
Dim
Dim
Dim
Sub Button1_Click(...)
metin, kelime As String
a As Char
i As Integer
metin = TextBox1.Text
TextBox1.Text = ""
For i = 0 To metin.Length() - 1
a = metin.Chars(i)
If a = " " Or a = "," Or a = "." Then
kelime = kelime + Chr(13)
TextBox1.Text = TextBox1.Text + kelime
kelime = ""
Else
kelime = kelime + a
End If
Next
End Sub
Burada enterları kare sembolü şeklinde göstermiştir. Bu metni kopyalayıp Word’e atarsak word de kelimeler alt
alta sıralanır. Yada kelimeleri listbox da listeleyebilirdiniz.
• ToLower(): Stringi küçük harfe çevirir. [string.ToLower() ]
• ToUpper(): Stringi büyük harfe çevirir. [string.ToUpper() ]
- Bu iki ifade windows’un dilinin kurallarına göre çevirir. Yani türkçe windows da türkçe dil kurallarına
göre çevrim yapar. Eğer başka dil kurallarına göre çevrim yapılması isteniyorsa şöyle kullanılır.
[string.ToUpper(New System.Globalization.CultureInfo(“en”) ]
-------------- 000 --------------• Compare(): İki stringi gelişmiş özellikler kullanarak karşılaştırmak için kullanılır.
- Stringleri büyük küçük harf duyarlı olarak karşılaştırır. [ string.Compare(string1, string2)=0 ]
- Büyük-küçük harf duyarlı olmaması isteniyorsa şöyle kullanılır [string.Compare(string1,string2,True)=0 ].
Bu iki ifadede iki string eşitse sonucu 0 olarak döndürür.
- Stringin bir parçasını karşılaştırma. [ string.Compare( string1, kaçıncıHarfden, string2, kaçıncıHarfden,
kaçHarf)
- Hangi dil kuralına göre karşılaştırma yapacağını belirlemek içinse şöyle kullanılır.
[string.Compare(string1, string2, True, New System.Globalization.CultureInfo(“en”)) ]
• CompareTo(): İki stringi büyük küçük harf duyarlı olarak karşılaştırmanın başka bir yöntemidir.
[string1.CompareTo(string2)=0 ] . Büyük küçük harf duyarlılığı olduğu için string önce tamamen küçük
harfe yada büyük harfe çevrilmelidir. [string1.ToLower.CompareTo(string2)=0] . stringler eşitse 0
döndürür.
• Equals(): İki stringi karşılaştırmanın üçüncü bir yolu ise bu metoddur. Burada 0 yerine True yada False
döndürür. İki şekilde kullanılabilir. Büyük-küçük harf duyarlıdır. [string.Equals(string1,string2) ] yada
[string1.Equals(string2) ] şeklinde kullanılabilir.
-------------- 000 --------------• StringWith(): Stringin belirlenen verilen metinle başlayıp başlamadığını kontrol eder. True yada False
döndürür. Büyük-küçük harf duyarlı olduğu için ToUpper yada ToLower ile dönüştürülmesi lazım.
Kullanımı şöyledir. [aranacakMetin.ToUpper.StringWith(arananMetin) ]
• EndsWith(): Stringin belirlenen metinle bitip bitmediğini kontrol eder. Kullanımı StringWith ile aynıdır.
-------------- 000 --------------• TrimStart(): Stringin başındaki boşlukları atar.
• TrimEnd(): Stringin sonundaki boşlukları atar.
• Trim(): Stringin her iki tarafındaki boşlukları atar.
- Bu metodlar kullanılırken metinin içindeki özel karakterler şu şekilde atılabilir.
[string.TrimEnd(“,”,”.”,”:”,”;”) ]
-------------- 000 --------------• SubString(): Stringin bir parçasını almak için bu metod kullanılır. İki şekilde kullanılabilir.
[string1.SubString(başlangıç)] yada [ string1.SubString(başlangıç,uzunluk) ]
• Split(): Bir stringi belli bir karakterler parçalara ayırmak için kullanılır. Parçalanan bölümler bir çok sayıda
olabileceği için geriye dönen karakterler diziye atılmalıdır. İki şekilde kullanılabilir.
[diziDegişkeni=ArananString.Split(ayırıcıString) ] yada
[diziDegişkeni=ArananString.Split(ayırıcıString,kaçAdetAlınaksa)]
-------------- 000 --------------• IndexOf(): Bir stringi başka bir stringin içinde aramak için kullanılır. Aramaya baştan başlar. Bulursa
kaçıncı karakterde bulduğunu geri döndürür. Bulamazsa -1 döndürür. Kullanımı
[aranılacakString.IndexOf(arananString) ] yada [aranılacakString.IndexOf(arananString,KaçıncıHarfden) ]
• LastIndexOf(): IndexOf la aynıdır sadece aramaya sondan başlar.
•
•
•
•
•
•
•
•
•
IndexOfAny(): Bir stringin içinde birden fazla stringin olup olmadığını aramak için kullanılır. Aramaya
baştan başlar. Kullanımı [ string1.IndexOfArray(arananKarakterler) ]
LastIndexOfAny(): Tek farkı aramaya sondan başlar.
-------------- 000 --------------Concat(): Bu metod iki veya daha fazla stringi birleştirmek için kullanılır. Kullanımı
[string1=Str.Concat(str1,str2,str3) ]
Join(): Bir grup stringin arasına bir karakter koyarak birleştirmek için kullanılır. Kullanımı
[string1=Str.Join(konulacakKarakter, dizi) ]
Insert(): Bir stringin içine belli bir stringi yerleştirmek için kullanılır. Kullanımı
[string1.Insert(kaçıncıHarfden,yerleştirilecekString) ]
Replace(): Bir stringin içinde geçen bir metni başka başka bir metinle değiştirmek için kullanılır. Kullanımı
[string1=str.Replace(arananMetin, yerineKonacakMetin) ]
Remove(): Bir stringin içinden belli bir bölümü çıkarmak için kullanılır. Kullanımı
[string1=str.Remove(kaçıncıHarfden, kaçHarf) ]
-------------- 000 --------------PadLeft(), PadRight(): Stringin sağına ve soluna istenen sayıda karekter ekleyerek stringin boyunu
uzatmayı sağlar. [EklenecekString.PadRight(adet, karakter)] . Örneğin Ali.PadRight(2,”*”) ifadesinin
sonucu Ali** olarak verir. Boşluk karakteri eklenerek stringin boyu uzatılmış olur.
Format(): Bir stringi farklı şekillerde formatlamak için bu metod kullanılır. Örnekler;
- String.Format(“Sayın {0} Bey, {1} Tarihinde sizleri düğünümüze bekliyoruz.”, Ali, 15.06.2005)
Çıktısı “Sayın Ali Bey, 15.06.2005 Tarihinde sizleri düğünümüze bekliyoruz” olacaktır.
- String.Format(“Bugün={0:d} “, Today)
Çıktısı “Bugün= 06.11.2005” şeklinde olacaktır.
Örnek: Bir TextBox’ın içine yazılan bir metindeki kelimeleri aradaki boşluklardan parçalara ayırıp her
bir parçayı diziye atsın. Ardından dizideki elemanları Listbox’ta görüntülesin.
Private Sub Button1_Click(...)
Dim kelime() As String
Dim i As Integer
kelime = TextBox1.Text.Split(" ")
For i = 1 To UBound(kelime)
ListBox1.Items.Add(kelime(i))
Next
End Sub
Burada .Split() metoduyla textbox’ın içindeki tüm kelimeler boşluklardan parçalara ayrılmakta ve kelimeler dizi
değişkenine aktarılmaktadır. For döngüsünde bir dizinin en yüksek eleman numarasını veren Ubound()
fonksiyonu kullanılarak dizinin içindeki tüm kelimeler Listbox’da görüntülenmektedir.
Stringler Üzerinde İşlem Yapan Fonksiyonlar
Daha öncede vurgulandığı gibi VB.Net de tüm değişkenler birer nesne gibi davranmaktadır. Her nesnenin
özellikleri ve üzerinde işlem yapan metodları bulunmaktadır. String değişkenleri üzerinde işlem yapan Metodları
daha önceden gördük. Şimdi ise yine stringler üzerinde işlem yapan Fonksiyonları görelim. Hemen hemen aynı
işlemleri yine Fonksiyonlar kullanarak yapabiliriz.
Stringler üzerinde Metodları kullanırken String değişkeninden sonra nokta konur ve metod yazılır. Fonksiyon
kullanırken ise Fonksiyon yazılır ve parantezler içine string yazılır.
Örneğin: ali.ToUpper() bir metod dur ve ali yazısını ALİ ye çevirir. Aynı işlemi fonksiyon kullanarak yapmak
istersek Ucase(ali) dersek sonuçta yine ALİ çıkar. Strignlerle ilgili belli başlı fonksiyonlar şunlardır.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
StrComp(metin1, metin2, [şart]) : İki stringi karşılaştırmak için kullanılır. Şart yazan kısımda 0
verilirse büyük küçük ayrımı yapılır, 1 verilirse bu ayrım yapılmaz. Geri dönen değer 0 ise strignler
eşittir. Pozitif ise birinci string büyüktür, negatif ise ikinci string büyüktür. Büyüklük alfabetik
sıralamaya göredir.
LTrim(metin) : Verilen stringin başındaki boşlukları kaldırır.
Rtim(metin) : Verilen stringin sonundaki boşlukları kaldırır.
Trim(metin) : Verilen stringin her iki tarafındaki boşlukları kaldırır.
Ucase(metin) : Verilen stringi büyük harfe çevirir.
Lcase(metin) : Verilen stringi küçük harfe çevirir.
StrReverse(metin) : Verilen stringin harflerini tersten yazar.
Len(metin) : Verilen stringin içindeki karakter sayısını verir. Boşluklar da dahil.
Strings.Right(metin,n) : Verilen stringin sağdan n karakter alınmasını sağlar.
Strings.Left(metin,n) : Verilen stringin soldan itibaren n karakter alınmasını sağlar.
Mid(metin,başlanğıç,[uzunluk]) : Verilen metnin içinde başlanğıç noktasından uzunluk kadar kadar
karakteri verir.
InsStr([KaçıncıHarfden], Neyinİçinde, neyi, [nasıl]) : Bir stringin içinde başka bir stringi baştan
itibaren arar. Nasıl parametresi 0 olursa büyük küçük ayrımı yapar, 1 olursa yapmaz. Geriye dönen
değer 0 ise aranan ifade bulunamamıştır. Bulunmuşsa stringi bulduğu yerin sayısını verir.
InsStrRev(Neyinİçinde, Neyi, [KaçıncıHarfden], [Nasıl]) : Bir stringin içinde başka bir stringi
sondan itibaren arar.
Replace(Neyinİçinde, Neyi, Neİle, [KaçıncıHaftden], [KaçTane],[Nasıl]) : Bir stringin içindeki bir
ifadeyi (neyi) başka bir ifade ile (neile) değiştirir. KaçıncıHarfden parametresi kullanılmazsa baştan
itibraren değiştirir. KaçTane parametresi kullanılmazsa bulduğu tüm değişiklikleri yapar. Nasıl
parametresi 0 ise büyük küçük ayrımı yapar, 1 ise yapmaz.
Space(sayı) : Verilen sayı kadar boşluk oluşturur.
Val(string) : Verilen stringi sayıya çevirir.
Str(sayı) : Verilen sayıyı stringe çevirir.
Asc(karakter) : Verilen karakterin Ascii kodunu verir.
Chr(AsciiKodu) : Verilen kodun karakter karşılığını üretir.
Karakter Gruplarını Tanıyan Metodlar
•
•
•
•
Char.IsLetter : Karakterin alfabetik bir harf olup olmadığını öğrenmek için kullanılır.
Char.IsDigit: Karakterin 0-9 arası bir rakam olup olmadığını öğrenmek için kullanılır.
Char.IsLower: Karakterin küçük harf olup olmadığını öğrenmek için kullanılır.
Char.IsUpper: karakterin büyük harf olup olmadığını öğrenmek için kullanılır.
Örnek: Formun üzerinde 2 tane textbox olsun. Bunlardan birincisine ad soyad girilsin. İkincisine ise
doğum tarihi girilsin. Eğer ad soyad kısmına rakam girilirse yada doğum tarih kısmına harf
girilirse ses çıkararak uyarı versin.
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If Char.IsDigit(e.KeyChar) Then
e.Handled = True
Beep()
End If
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If Not Char.IsDigit(e.KeyChar) Then
e.Handled = True
Beep()
End If
End Sub
Burada basılan tuşları alabilmek için KeyPress olayını kullanacağız. Kullanıcı bir tuşa bastığında bu olay
meydana gelir. Prosedür içinde bu olayı temsil eden değişken “e” değişkenidir. Bu olayın KeyChar özelliği
bize basılan tuşu verir. Kullanıcının bastığı tuşu iptal etmek için ise aynı olayın Handled özelliği kullanılır.
Beep() fonksiyonu ise sesli uyarı verir.
ÖRNEK: Bir çok satırlı textbox’ın içerine atılan metindeki kelimleri ayırıp listbox’da alt alta sıralı olarak
gösterin.
TARİH TİPİ DEĞİŞKENLER
Date: Tarih tipi değişkenler bu ifadeyle tanımlanırlar. Tarihler “ “ işaretleri arasında yada # # işaretleri arasında
tanımlanabilirler. Tırnak içinde tanımlanırlarda Windowsun ayarlarını kullanır. Yani Türkçede “gün/ay/yıl” olur.
Oysa ingilizcede tarih “ay/gün/yıl” olarak kullanılır.
Dim tarih as Date şeklinde tanımlanır.
IsDate(tarih ve saat): Bu fonksiyon verilen bir tarihin yada saatin geçerli olup olmadığını tespit eder, geçerli ise
True döndürür. Windows’un ayarlarını kullanır.
Today: Bilgisayarın tarihini öğrenmek ve değiştirmek için kullanılır.
TimeOfDay: Bilgisayarın saatini öğrenmek ve değiştirmek için kullanılır.
Now : Bilgisayarın hem tarihini hemde saatini sadece öğrenmek için kullanılır.
Örnek: Formun üzerine iki tane text box, bir tane buton koyun. Birinci textboxtan sistemin tarihini,
ikinci textbox’tan sistemin saatini açılışta gösterin ve ardından değiştirin. Eğer formata uygun değer
girilmezse uyarı versin.
Private Sub Form1_Load(...)
TextBox1.Text = Today
TextBox2.Text = TimeOfDay
End Sub
Private Sub Button1_Click(...)
If IsDate(TextBox1.Text) Then
Today = TextBox1.Text
Else
MsgBox("Tarih Geçersiz")
End If
If IsDate(TextBox2.Text) Then
TimeOfDay = TextBox2.Text
Else
MsgBox("Saat Geçersiz")
End If
End Sub
Tarih Tipi Değişkenlerin Metodları: Tarih tipi değişkenler üzerinde işlemler yapmak için hem metodlar
(değişkenin yanına noktayı koyduğumuzda çıkan pencereden seçebilirsiniz) hemde fonksiyonlar kullanılır.
Örneğin metodlardan add ile başlayanlar tarih yada saatle ilgili olarak ekleme veya çıkarma işlemi yapar. Bazı
önemli metodlar şunlardır.
•
•
•
•
•
.AddDays(gün): Tarihe belirtilen gün kadar ekleme veya çıkarma yapar.
.AddMonths(ay): Tarihe belirtilen ay kadar ekleme veya çıkarma yapar.
.AddYears(yıl): Tarihe belirtilen yıl kadar ekleme veya çıkarma yapar.
.Month: Tarihin ayını verir.
.Year: Tarihin yılını verir.
•
•
•
.DayOfYear: Yılın kaçıncı gün olduğunu verir.
.DayOfWeek: Haftanın kaçıncı gün olduğunu verir. 0 Pazar, 1 Pazartesi şeklinde gider.
.IsLeapYear(yıl): Belirtilen yılın artık yıl olup olmadığını (29 şubat çekiyorsa) True değeri döndürerek
verir.
•
•
•
•
•
•
•
.AddHours(saat): Zamana belirtilen saat kadar ekleme veya çıkarma yapar.
.AddMinutes(dakika): Zamana belirtilen dakika kadar ekleme veya çıkarma yapar.
.AddSeconds(saniye): Zamana belirtilen saniye kadar ekleme veya çıkarma yapar.
.Hour: Zamanın saat kısmını verir.
.Minute: Zamanın dakika kısmını verir.
.Second: Zamanın saniye kısmını verir.
.Millisecond: Zamanın milisaniye (1/1000 saniye) kısmını verir.
•
.ToOADate: Tarih tipindeki değişkenin değerini integer türü bir değişkene çevirir. Böylece tarihler üzerinde
işlem yapmak kolaylaşır.
Örnek: Formun üzerine bir tane textbox, bir tane buton koyun. Doğum tarihinizi girdiğinizde size
hangi gün doğduğunuzu veren programı en kısa şekilde yazmaya çalışın.
Private Sub Button1_Click(...)
Dim tarih As Date
Dim gunler() As String = {"paz", "pzt", "sal", "çar", "per", "cum",
"cmt"}
tarih = TextBox1.Text
MsgBox(gunler(tarih.DayOfWeek))
End Sub
Örnek: Satılan bir ürünün borcunun gecikmeli ödenmesi nedeniyle ödenecek ceza miktarını gösteren
bir program yazın. Geciken her gün başına ürünün fiyatına 1/1000 ceza eklesin. Ödemenin yapıldığı
gün sistem saati olsun ve kendiliğinden yüklensin.
Private Sub Button1_Click(...)
Dim tarih1, tarih2 As Date
Dim fark, ceza As Long
tarih1 = TextBox3.Text
tarih2 = TextBox4.Text
fark = tarih2.ToOADate - tarih1.ToOADate
ceza = fark * 0.001 * Val(TextBox2.Text)
TextBox5.Text = ceza
TextBox6.Text = Format((Val(TextBox2.Text) + ceza), "##,##")
End Sub
Private Sub Form1_Load(...)
TextBox4.Text = Today
End Sub
DateAndTime.Timer: Bu özellik bir zaman sayacıdır ve gece yarısından itibaren kaç milisaniye (salise)
geçtiğini verir. Sayının tam kısmı Saniyeyi, ondalık kısmı ise milisaniyeyi gösterir. Bu özellik kullanılarak iki
işlem arasında geçen süre hesaplanabilir.
Örnek: Bir döngünün kaç saniye sürdüğünü kullanılan değişkenlerin tipini tanımlayarak ve
tanımlamadan hesaplayın.
Private Sub Button1_Click(...)
Dim ilk, son As Double
Dim i
ilk = DateAndTime.Timer
For i = 1 To 10000000
i = i
Next
son = DateAndTime.Timer
MsgBox("geçen süre=" & (son - ilk))
End Sub
ÖDEV: Formun üzerine iki tane tane combobox yerleştirip buradan ay ve yılı seçtiğimizde bize o ayın tüm
günlerini haftalık günleri ile birlikte gösteren bir program yazın.
ÖDEV: Geçen süreyi tahmin etme üzerine
HAZIR FONKSİYONLAR
A)Matematiksel Fonksiyonlar
1)Math.abs(Ondalık Sayı)=Ondalıklı sayıların mutlak değerini alır.
ÖRNEK: Göster butonuna basıldığında textboxtaki negatif ondalıklı sayının mutlak değerini
alan program kodlarını yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
TextBox2.Text = Math.Abs(Val(TextBox1.Text))
End Sub
2) Math.Ceiling(Ondalık Sayı)=Ondalıklı sayıyı yukarıya yuvarlar.
Math.Floor(Ondalık Sayı)=Ondalıklı sayıyı aşağıya yuvarlar.
3) Math.PI=Pi sayısını verir(22/7)
4) Math.Pow(Sayı1,Sayı2)=Sayının üssünü(kuvvetini) alır.
Sayı1=Üssü alınacak sayı
Sayı2=Üs
ÖRNEK:25 Sayısının 0.5 (1/2) üssünü alan programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
MsgBox("Sayının Kuvveti " & Math.Pow(25, 0.5))
End Sub
5) Math.Round(Ondalıklı Sayı,Hassasiyet)=Ondalıklı sayıyı verilen hassasiyete göre
yuvarlar.
Hassasiyet=Ondalıklı sayının virgülden sonraki basamaklarının kaç tane olacağını belirtir.
ÖRNEK: Msgbox(Math.Round(17.247691,3))
Sonuç olarak 17.248 gösterecektir.
6) Math.Sin()=Verilen açının sinüs değerini verir.
Math.Cos()=Verilen açının kosinüs değerini verir.
Math.Tan()=Verilen açının tanjant değerini verir.
Math.ASin()=Verilen değerin sinüs cinsinden açısını bulur.
Math.ACos()=Verilen değerin kosinüs cinsinden açısını bulur.
Math.ATan()=Verilen değerin tanjant cinsinden açısını bulur.
ÖRNEK: Msgbox(Math.Tan(22/28))
Sonuç olarak 1 değerini verecektir.
NOT: Açılar radyan cinsinden verilmelidir. Yukarıdaki örnekte de 22/28 (yani 45˚ ) radyan
cinsinden verilmiştir.
ÖRNEK: Msgbox(Math.A.Sin(0.5))
Sonuç olarak 0.5235 radyan değerini verir. Bu değerde 30˚ dereceye karşılıktır.
DÖNGÜLER VE BLOKLAR
Program içerisinde kontrolü, tekrarlı işlemlerin yapılmasını sağlarlar.
IF THEN ELSE DEYİMİ: Programın koşullara bağlı olarak karar vermesini sağlar.
Yapısı A) IF Koşul THEN İşlemler
B)IF Koşul1 THEN
İşlemler1
ELSEIF Koşul2 THEN
İşlemler2
ELSEIF Koşul3 THEN
İşlemler3
…
ELSE İşlemler N
END IF
NOT 1: ELSEIF istenilen sayı kadar arttırılır. Her seferinde yanına koşul yazılmalıdır.
NOT 2: Sadece ELSE deyimi hiçbir şartın sağlanmadığı durumlarda kullanılır. Yanına koşul
yazılmaz.
ÖRNEK 1: Girdiğimiz notun harfsel olarak karşılığını veren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim puan As Integer
puan = Val(TextBox1.Text)
If puan <= 100 And puan >= 90 Then
MsgBox("A1 ile Geçtiniz")
ElseIf puan < 90 And puan >= 80 Then
MsgBox("A2 ile Geçtiniz")
ElseIf puan < 80 And puan >= 70 Then
MsgBox("B1 ile Geçtiniz")
ElseIf puan < 70 And puan >= 65 Then
MsgBox("B2 ile Geçtiniz")
ElseIf puan < 65 And puan >= 60 Then
MsgBox("C ile Geçtiniz")
ElseIf puan < 60 And puan >= 0 Then
MsgBox("F3 ile Kaldınız")
Else : MsgBox("Hatalı Giriş Yaptınız")
End If
End Sub
ÖRNEK 2: Kullanıcı adı ve şifreye göre giriş yapan ve Msgbox’la şifrenin doğru olup
olmadığını gösteren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim kullanici, sifre As String
kullanici = TextBox1.Text
sifre = TextBox2.Text
If kullanici = "Ali" And sifre = "123" Then
MsgBox("Şifre Doğru")
Else : MsgBox("Şifre Yanlış")
End If
End Sub
NOT 3: Textbox’ın içeriğini yıldız(*) olarak göstermek için Textbox’ın properties
penceresinden “Password Char” özelliğine “*” yazılır.
ÖRNEK 3: Örnek 2 için form daha yüklenirken bir pencere açılsın ve burada bizden sadece
şifre istesin. Tamam tuşuna basıldığında şifre doğru ise form gözüksün,yanlış ise programı
kapatsın.Bu işlemi yapan programın kodlarını yazınız.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim sifre As String
sifre = InputBox("Şifre Giriniz", "ŞİFRE KONTROLÜ", "", 300, 200)
If sifre <> "123" Then End
End Sub
NOT 4: Dışarıdan bir pencere ile bir değer alınırken inputbox() fonksiyonu kullanılır.
Kullanılışı: sifre=inputbox(“Şifrenizi Giriniz:”,”SIFRE KONTROLU”,” ”,300,200)
NOT 5: Programdan çıkışı sağlamak için “End” komutu kullanılır. Örnek 3’te IF koşulunun
sonuna yazılan “End” ; eğer şifre 123 ‘e eşit değilse programdan çık anlamındadır. IF tek
satırda yazıldığı için “end if “ ’e gerek yoktur.
FOR… NEXT DÖNGÜSÜ
Çalışmasını istediğimiz kodları birçok kez çalıştırmak istersek bu döngüyü kullanabiliriz.
Yapısı: FOR sayaç değişkeni =ilk değer TO son değer [step sayacın artış miktarı]
…Çalışacak Kodlar
NEXT sayaç değişkeni
NOT 1: “[ ]” ‘ler tercihe bağlı olduğunu gösterir ve program yazarken kullanılmaz.
NOT 2:FOR NEXT döngüsünde step adımı kullanılmazsa sayaç birer birer artar.
ÖRNEK 4: İlk değer ve son değer arasındaki sayıları toplatıp Label’a yazdıran programı
yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim toplam As Integer = 0
Dim ilkdeger, sondeger, i As Integer
ilkdeger = Val(TextBox1.Text)
sondeger = Val(TextBox2.Text)
For i = ilkdeger To sondeger
toplam = toplam + i
Next i
Label4.Text = toplam
End Sub
ÖRNEK 5: 1’den 6’ya kadar olan sayıları 2’şer 2’ şer olmak üzere ekranda Msgbox’la
gösteren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim i As Byte
For i = 1 To 6 Step 2
MsgBox(i)
Next i
End Sub
ÖRNEK 6: İlk değer ile son değer arasındaki değerleri artış miktarına göre Msgbox’ la
ekranda gösteren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim i, ilk, son, art_mik As Integer
ilk = Val(TextBox1.Text)
son = Val(TextBox2.Text)
art_mik = Val(TextBox3.Text)
For i = ilk To son Step art_mik
MsgBox(i)
Next i
End Sub
FOR EACH DÖNGÜSÜ
For Each döngüsü bir dizinin içerisindeki elemanları otomatik olarak bir değişkene atıp bu
değişkeni kullanarak sırayla elemanları görüntülememizi yada üzerinde işlem yapmamızı
sağlar.
Örnek: Biz diziye 6 tane ili tanımlama satırında atayıp daha sonra butona basıldığında bu dizi
deki her bir elemanı for next döngüsü kullanmadan Listeye ekletin.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim Sehirler() As String = {"Adana", "Ankara", "Bursa", "İstanbul", "İzmir"}
Dim Sehir As String
For Each Sehir In Sehirler
ListBox1.Items.Add(Sehir)
Next
End Sub
DO LOOP, DO WHİLE – LOOP , DO UNTIL – LOOP , WHILE – LOOP
DONGULERİ
Do-Loop Döngüsü: Bu döngü içeriden çıkılmadığı sürece sonsuza kadar döner
Örnek: 1-100 kadar olan sayıları sonsuz döngü kullanarak Listeye ekleyin
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim i As Integer
Do
i=i+1
ListBox1.Items.Add(i)
If i = 100 Then Exit Do
Loop
End Sub
Do while-Loop Döngüsü
Başlangıçta bizden bir şart ister ve bu şart geçerli olduğu müddetçe çalışır. Eğer yinede arada
bir şart gerçekleştiğinde çıkmak istersek Exit Do ile çıkabiliriz.
Örnek: 1-100 kadar olan sayıları Do while-loop döngüsü ile listeye ekletin.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim i As Integer
Do While (i < 100)
i=i+1
ListBox1.Items.Add(i)
'If i = 78 Then Exit Do
Loop
End Sub
Do Until- Loop döngüsü: Şart sağlana kadar döngüyü çalıştıracaktır.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim i As Integer
Do Until (i > 100)
i=i+1
ListBox1.Items.Add(i)
'If i = 78 Then Exit Do
Loop
End Sub
***********************
Do
i=i+1
ListBox1.Items.Add(i)
'If i = 78 Then Exit Do
Loop Until (i > 100)
******************
Do
i=i+1
ListBox1.Items.Add(i)
'If i = 78 Then Exit Do
Loop While (i < 100)
ÖRNEK 1: 0–100 arasındaki sayılardan rasgele seçen ve ne zamanki sayı 50 olduğunda
döngüden çıkan ve kaçıncı seferde bulduğunu gösteren programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim a, i As Integer
i = 0
Randomize()
Do
a = Int(Rnd() * (100) + 1)
If a = 50 Then Exit Do
i = i + 1
Loop
MsgBox("Sayi=" & a & " " & "Kaç Seferde Bulduğunuz=" & i)
End Sub
Aynı program Do-Loop While döngüsü ile yapılacak olursa komutları şu şekilde olurdu:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim a, i As Integer
i = 0
Randomize()
Do
a = Int(Rnd() * (100) + 1)
i = i + 1
Loop While a <> 50
MsgBox("Sayi=" & a & " " & "Sayaç=" & i)
End Sub
NOT: 100 ile 10000 arasındaki sayıları listeye eklemek isteyelim.
Eğer Do While Kullanılırsak (i>100) yada i<10000 şeklinde ifade etmeliyiz. “i 100 den
büyük mü? =Evet” yada üst sınırı kullanırsak “i 10000 den küçük mü=Evet. Her ikisindede
evet dediğimiz için döngü çalışacaktır.
Eğer Until kullanırsak. (i>10000) “i 10000 den büyük olana kadar devam et.
İ=100 olsun. “i 10000 den büyükmü?” Hayır Cevabı aldığımız için döngü çalışacaktır. Ne
zaman çıkacak evet cevabını aldığımızda çıkacaktır.
Dikkat edilirse birinde Evet dediğimizde çalışıyor, Diğerinde ise hayır dediğimizde çalışıyor.
Aşağıdaki örnekleri inceleyin.
Dim i As Integer = 100
'Dim kare As Integer
'For i = 1 To 100
'ListBox1.Items.Add(i)
'Next
'Do
'i = i + 1
'ListBox1.Items.Add(i)
'kare = i * i
'If kare > 30000 Then Exit Do
'Loop
'Do While (i >= 100)
'i = i + 1
'ListBox1.Items.Add(i)
'If i = 10000 Then Exit Do
'Loop
'Do
'i = i + 1
'ListBox1.Items.Add(i)
'Loop While (i = 10000)
'Do Until (i >= 10000)
'i = i + 1
'ListBox1.Items.Add(i)
'Loop
Do
i = i + 1
ListBox1.Items.Add(i)
Loop Until (i > 10000)
LİSTBOX (LİSTE KUTUSU)
NOTLAR:
1)”ListBox1.Selectedindex” komutu listede seçili olan elemanın numarasını verir.
2)”ListBox1.Selecteditem” komutu listede seçili olan elemanı gösterir.
3)”ListBox1.Items.RemoveAt(…)” komutu index (sıra) numarası verilen elemanı siler.
Parantez içine sıra numarası yazılır.
4)”ListBox1.Items.Remove(…)” komutu ismi yazılan elemanı siler. Parantez içine isim
yazılır.
5) ”ListBox1.Items.Count” komutu listedeki eleman sayısını verir.
6) ”ListBox1.Items.IndexOf(…)” komutu listeden seçilen elemanın kaçıncı eleman olduğunu
gösterir.
ÖRNEK 1: Aşağıdaki çıktıyı veren programı yapınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
ListBox1.Items.Add(TextBox1.Text)
TextBox1.Text = " "
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
ListBox1.Items.Remove(ListBox1.SelectedItem)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
If ListBox1.Items.Count < TextBox2.Text Then
ListBox1.Items.Insert(ListBox1.Items.Count, TextBox3.Text)
Else : ListBox1.Items.Insert(Val(TextBox2.Text), TextBox3.Text)
End If
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
MsgBox("Eleman Sayısı " & ListBox1.Items.Count)
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
MsgBox("Seçtiğiniz Kişinin Sıra Numarası " &
ListBox1.Items.IndexOf(TextBox4.Text))
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ListBox1.SelectedIndexChanged
MsgBox(ListBox1.SelectedItem)
End Sub
COMBOBOX(AÇILIR LİSTE)
ComboBox, ListBox’ ın aynısıdır. Aralarındaki tek fark maddeler burada gizlenmiş olarak
gösterilir. Kullanılan komutlar ListBox komutları ile aynıdır.
ÖRNEK 2: 0 ile 100 arasından 10 tane sayıyı rasgele olarak ComboBox’ ın içerisinde
toplayan programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim sayi, i As Integer
Randomize()
For i = 1 To 10
sayi = Int(Rnd() * (100 - 0) + 0)
ComboBox1.Items.Add(sayi)
Next i
End Sub
NOT: Randomize() fonksiyonu zamana bağlı olarak “Rnd()” fonksiyonunu çalıştırır. Eğer bu
fonksiyon kullanılmaz ise Rnd() programda hep aynı sayıları üretecektir.
Bu fonksiyon sayesinde Rnd() zamana bağlı olarak yeni sayılar üretir. Zaman sürekli
ilerlediği için dolayısıyla her üretilen sayı grubu bir öncekilerden farklı olacaktır.
Rnd Fonksiyonunun Kullanılışı
Int(Rnd()*(son değer-ilk değer)+ilk değer)
Örnek: Sayfaya 1 tane ComboBox, 1 tane ListBox 2 tane buton ekleyin. Birinci butona
tıkladığımızde 0-100 arasından 100 tane sayıyı Combobox’a attırın. Daha sonra ikinci butona
tıkladığımızda her sayıdan kaç tane attığını Listbox’da göstersin.
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim RastgeleSayi As Integer
For i = 1 To 100
RastgeleSayi = Int((Rnd() * 100))
ComboBox1.Items.Add(RastgeleSayi)
Next
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim sayac As Integer
Dim OkunanSayi As Integer
For i = 0 To 99
sayac = 0
OkunanSayi = ComboBox1.Items.Item(i)
For j = 0 To 99
If OkunanSayi = ComboBox1.Items.Item(j) Then
sayac = sayac + 1
End If
Next
ListBox1.Items.Add(OkunanSayi & "-" & sayac)
Next
End Sub
End Class
ÖDEV: Google arama motoru benzeri Tam kelime Kısmı kelime arama yapan bir program
yazın.
CHECKBOX
Seçenekler arasından bir veya birden fazla seçim yapmamızı sağlar.
ÖRNEK 3: Aşağıdaki çıktıyı veren programı yapınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim takim As String
takim = " "
If CheckBox1.Checked = True Then
takim = takim + "FENERBAHÇE "
End If
If CheckBox2.Checked = True Then
takim = takim + "GALATASARAY "
End If
If CheckBox3.Checked = True Then
takim = takim + "BEŞİKTAŞ "
End If
If CheckBox1.Checked = False And CheckBox2.Checked = False And
CheckBox3.Checked = False Then
MsgBox("Takım Tutmuyorsunuz")
Else
MsgBox("Tuttugumuz Takım/Takımlar " & takim)
End If
End Sub
RADİOBUTTON
Seçenekler arasından sadece bir tanesini seçmemizi sağlar. Kullanımı Checkbox nesnesi ile
aynıdır. Yalnız burada RadioButton’ların mutlaka daha önceden GroupBox nesnesi içerisine
konması gerekir. Bu nesne RadioButton’ ları grup haline getirir. Butonlarda biri seçildiğinde
diğerinin seçimini iptal eder.
ÖRNEK 4: Aşağıdaki çıktıyı veren programı yapınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
If RadioButton1.Checked = True Then
MsgBox("Tutugunuz Takım FENERBAHÇE")
ElseIf RadioButton2.Checked = True Then
MsgBox("Tutugunuz Takım GALATASARAY")
ElseIf RadioButton3.Checked = True Then
MsgBox("Tutugunuz Takım BEŞİKTAŞ")
Else
MsgBox("Takım Tutmuyorsunuz")
End If
End Sub
Örnek: Formun üzerine
PİCTUREBOX
ÖZELLİKLERİ
1) Picturebox’ın “properties” özellikler penceresindeki “Image” özelliğine resmin yolu verilir.
Kullanımı:
Picturebox1.Image= Image.FromFile (“Resmin Konumu “)
2) Picturebox’ın “properties” özellikler penceresindeki “SizeMode” özelliğindeki
StretchImage seçeneği resmi çerçeveye uydurur, AutoSize seçeneği ise çerçeveyi resme
uydurur.
Kullanımı:
Picturebox1.SizeMode= StretchImage
Picturebox1.SizeMode= AutoSize
3) Picturebox’ın “Width” özelliği resmin genişliğini ayarlamamızı sağlar
Kullanımı:
Picturebox1.Width= ( sayı )
4) Picturebox’ın “Height” özelliği resmin yüksekliğini ayarlamamızı sağlar
Kullanımı:
Picturebox1.Height= ( sayı )
ÖRNEK 1: Aşağıdaki çıktıyı veren program kodlarını yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
PictureBox1.Width = Val(TextBox1.Text)
PictureBox1.Height = Val(TextBox2.Text)
PictureBox1.Image = Image.FromFile("C:\Documents and Settings\All
Users\Belgeler\Resimlerim\Örnek Resimler\Kış.Jpg")
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
End Sub
OPENFİLEDİALOG
Resimlerin konumunun otomatik olarak alınmasını sağlar. OpenFileDialog kutusu tasarım
aşamasında gözükürken program çalıştırıldığında bu kutu görünmez.
OpenFileDialog kutusunun “Properties “ özellikler penceresinden Filter özelliğine
(Dosya Türü kısmında görünecek isim|*.Dosyanın uzantısı) yazılır.
ÖRNEK 2: Aşağıdaki resmi görüntüleyen ve msgbox ile resmin konumunu veren program
kodlarını yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "Bitmap Resimleri|*.bmp|Jpeg
Resimleri|*.jpg"
OpenFileDialog1.ShowDialog()
PictureBox1.Image =
Image.FromFile(OpenFileDialog1.FileName.ToString)
MsgBox(OpenFileDialog1.FileName.ToString)
End Sub
NOT 1: OpenFileDialog kutusunun ShowDialog( ) özelliği bize otomatik olarak resimlerin
bulunduğu diyalog kutusunu getirir.
NOT 2: OpenFileDialog kutusunun FileName.ToString özelliği ise bize resmin konumunu
verir.
ÖRNEK: Listeden seçilen resmi picturebox’ta görüntüleyen programı yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "Bitmap Resimleri|*.bmp|JPEG
Resimleri|*.jpg"
OpenFileDialog1.ShowDialog()
ListBox1.Items.Add(OpenFileDialog1.FileName.ToString)
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ListBox1.SelectedIndexChanged
PictureBox1.Image = Image.FromFile(ListBox1.SelectedItem)
End Sub
PICTUREBOX NESNESİ
Örnek: Bir resim albümü yapınız.
Public Class Form1
Dim s As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim resimyolu As String
OpenFileDialog1.ShowDialog()
resimyolu = OpenFileDialog1.FileName
PictureBox1.Image = Image.FromFile(resimyolu)
ListBox1.Items.Add(resimyolu)
End Sub
Private Sub RadioButton2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles RadioButton2.Click
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
End Sub
Private Sub RadioButton1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles RadioButton1.Click
PictureBox1.SizeMode = PictureBoxSizeMode.Normal
End Sub
Private Sub ListBox1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ListBox1.Click
PictureBox1.Image = Image.FromFile(ListBox1.SelectedItem)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim ilkresim As String
s=0
ilkresim = ListBox1.Items.Item(s)
PictureBox1.Image = Image.FromFile(ilkresim)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim sonresim As String
s = ListBox1.Items.Count - 1
sonresim = ListBox1.Items.Item(s)
PictureBox1.Image = Image.FromFile(sonresim)
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Dim resim As String
s=s+1
If s > ListBox1.Items.Count - 1 Then
s=0
End If
resim = ListBox1.Items.Item(s)
PictureBox1.Image = Image.FromFile(resim)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
Dim resim As String
s=s-1
If s < 0 Then
s = ListBox1.Items.Count - 1
End If
resim = ListBox1.Items.Item(s)
PictureBox1.Image = Image.FromFile(resim)
End Sub
End Class
TİMER
Bu nesne belirlenen bir işlemi belli zaman aralıklarında yapılmasını sağlar. Nesnenin en
önemli özelliği “Interval” özelliğidir. Eğer Interval =1000 olarak alırsak zaman aralıkları 1
saniye olacaktır. Yani timer nesnesinin içerisine yazmış olduğumuz kodlar her 1 saniyede bir
çalışacaktır.
ÖRNEK 1:Formun üzerinde dakika ve saniyeleri gösteren bir sayaç yapınız.
Dim i As Integer = 0
Dim j As Integer = 0
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
i = i + 1
Label2.Text = i
If i Mod 60 = 0 Then
j = j + 1
Label1.Text = j
i = 0
End If
End Sub
ÖRNEK 2:Form üzerine yerleştirilen resmin zamanla hareket etmesini sağlayan program
kodlarını yazınız.
Dim i As Integer = 0
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
i = i + 1
PictureBox1.Left = PictureBox1.Left + i
End Sub
ÖRNEK 3:Forma bir resim eklenip bu resmin form üzerinde rasgele yer değiştirmesini
sağlayan ve resim üzerine tıklandığında da resmi kaç saniyede yakaladığını msgboxla
gösteren programı kodlarını yazınız.
Dim l As Integer
Dim t As Integer
Dim en, boy, s As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
Randomize()
l = Int(Rnd() * 200)
t = Int(Rnd() * 200)
PictureBox1.Left = l
PictureBox1.Top = t
s = s + 1
End Sub
Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles PictureBox1.Click
Timer1.Enabled = False
MsgBox(s & " Saniyede Yakaladınız")
End Sub
ÖDEV: Gerçek bir tetris programı yazın. Bunun için Picturebox ve Timer nesnesi kullanın.
Yardımcı olacak kodlar aşağıda verilmiştir.
Public Class Form1
Dim x As Integer = 200
Dim y As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
y = y + 10
KoordinatHesaplama(x, y)
End Sub
Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Left Then
x = x - 10
End If
If e.KeyCode = Keys.Right Then
x = x + 10
End If
If e.KeyCode = Keys.Up Then
End If
If e.KeyCode = Keys.Down Then
y = 400
Timer1.Enabled = False
KoordinatHesaplama(x, y)
End If
End Sub
Sub KoordinatHesaplama(ByVal x As Integer, ByVal y As Integer)
PictureBox2.Location
PictureBox3.Location
PictureBox4.Location
PictureBox5.Location
End Sub
End Class
=
=
=
=
New
New
New
New
Point(x, y)
Point(x + 32, y)
Point(x + 64, y)
Point(x + 96, y)
DİZİLER
Aynı değişken içerisinde indis kullanılarak çok sayıda değeri hafızada tutmak istersek dizileri
kullanabiliriz. Dizilerin indisi 0’dan başlar ve hafızada ayrılan yer sayısınca sayısı artırılabilir.
Diziler bilgileri geçici olarak hafızada tutarlar(Memory(RAM))( Elektrik kesintisinde bilgiler
kaybolur) Diziler 1,2,3 ya da çok sayıda boyutlu olarak tanımlanabilir.
Örnek: Dışarıdan n adet sayıyı diziye alan ve daha sonra bunları sırayla listbox’a ekleyen bir
program yazınız. Dışarıdan sayıları Inputbox’a alın. Daha öncesinde kaç sayı girileceğini de
isteyin.
Public Class Form1
Dim isim() As String
Dim i, j As Integer
Dim ElemanSayisi As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
i = i + 1
ReDim Preserve isim(i)
isim(i) = TextBox1.Text
ElemanSayisi = i
TextBox1.Clear() 'Bu satır Textbox'ın içerisini boşaltır.
TextBox1.Select() 'Bu satır imlecin içerisine otomatik olarak
yerleşmesini sağlar
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
For j = 1 To ElemanSayisi
ListBox1.Items.Add(isim(j))
Next
End Sub
End Class
ÖRNEK 1: Aşağıdaki programı deneyiniz.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim a(3) As Integer 'Bu dizi toplam 4 tane sayıyı içinde tutar.
Dim i As Integer
a(0),a(1),a(2),a(3)’
a(0) = 5
a(1) = 3
a(2) = 7
a(3) = 8
For i = 0 To 3
MsgBox(a(i))
Next i
End Sub
ÖRNEK 2: 3 tane ismi içinde tutacak olan bir diziyi string olarak tanımlayınız ve bu diziye 3
tane isim atayın. Daha sonra bu isimleri msgboxla gösteren program kodlarını yazınız.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim isim(2) As String
Dim i As Integer
isim(0) = "Ali"
isim(1) = "Can"
isim(2) = "Oya"
For i = 0 To 2
MsgBox(isim(i))
Next i
End Sub
ÖRNEK 3: Bir Textbox’a girilen 3 tane ismi Ekle butonuyla bir diziye ekleyin.Daha sonra
Göster butonuna basıldığında bu isimleri msgbox ‘la listeleyen program kodlarını yazınız.
Dim ad(2) As String
Dim i As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
ad(i) = TextBox1.Text
i = i + 1
TextBox1.Text = " "
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim j As Integer
For j = 0 To 2
MsgBox(ad(j))
Next j
End Sub
ÖRNEK 4: 3.Örneği başlangıçta diziye kaç tane isim girileceğini bilmeden yapalım.
Dim ad() As String
Dim i As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
ReDim Preserve ad(i)
ad(i) = TextBox1.Text
i = i + 1
TextBox1.Text = " "
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim j As Integer
For j = 0 To i - 1
MsgBox(ad(j))
Next j
End Sub
NOT :” ReDim Preserve ad(i) “ komutunda Preserve kelimesini kullanırsak dizinin önceki
elemanlarını da dizi içinde tutmuş oluruz. Eğer bu kelimeyi kullanmazsak her seferinde
dizinin içerisini boşaltır önce yazılan elemanlar kaybolur.
Örnek: ???
Public Class Form1
Dim kisi(10, 2) As String
Dim i, j As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
kisi(i, 0) = TextBox1.Text
kisi(i, 1) = TextBox2.Text
i = i + 1
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim k As Integer
For k = 0 To i - 1
ListBox1.Items.Add(kisi(k, 0) & "," & kisi(k, 1))
Next
End Sub
End Class
ÖRNEK 5: İstediğimiz kadar sayı ekleyip eklediğimiz sayıları Listboxta gösteren topla
dediğimizde de sayıların toplamını Label’da gösteren program kodlarını yazınız.
Dim sayi() As Integer
Dim i As Integer = 0
Dim toplam As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
ReDim Preserve sayi(i)
sayi(i) = TextBox1.Text
i = i + 1
TextBox1.Text = " "
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim j As Integer
ListBox1.Items.Clear()
toplam = 0
For j = 0 To i - 1
ListBox1.Items.Add(sayi(j))
toplam = toplam + sayi(j)
Next j
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Label1.Text = "Toplam=" & toplam
End Sub
ÖRNEK: Bir öğrenci listesini “Ad, vize, Final” bilgileri olmak üzere dışarıdan sırayla alın.
En sonunda bu listeyi Listeboxda “Ali,23,56” şeklinde göstersin.
Public Class Form1
Dim Dizi(100, 3) As String
Dim i, j As Integer
Dim ElemanSayisi As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
i = i + 1
Dizi(i, 0) = TextBox1.Text
Dizi(i, 1) = TextBox2.Text
Dizi(i, 2) = TextBox3.Text
ElemanSayisi = i
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
For j = 1 To ElemanSayisi
ListBox1.Items.Add(Dizi(j, 0) & "," & Dizi(j, 1) & "," &
Dizi(j, 2))
Next
End Sub
End Class
Araştırma: Bur örnekte Redim çalıştırılamadı. İnternetten araştırılıp bulunacak.
ÖRNEK 6:┌
┐
│ b00 b01 b02 │
│ b10 b11 b12 │
└
┘
Yukarıda verilen matrisin elemanlarını dışarıdan alıp bu değerleri toplatan program kodlarını
yazınız.
Dim SatirSayisi, SutunSayisi As Integer
Dim i, j As Integer
Dim toplam As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
SatirSayisi = Val(TextBox1.Text) - 1
SutunSayisi = Val(TextBox2.Text) - 1
Dim B(SatirSayisi, SutunSayisi) As Integer
For i = 0 To SatirSayisi
For j = 0 To SutunSayisi
B(i, j) = InputBox("B" & i & j & " Elemanını Giriniz",
"MATRİS GİRİŞİ")
toplam = toplam + B(i, j)
Next j
Next i
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
MsgBox("SAYILARIN TOPLAMI=" & toplam)
End Sub
Örnek: Dinamik olarak iki matrisin toplamını yapan bir program yazınız
Public Class Form1
Dim M, N, i, j As Integer
Dim A(10, 10), B(10, 10), C(10, 10) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
M = Val(TextBox1.Text)
N = Val(TextBox2.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
For i = 1 To M
For j = 1 To N
A(i, j) = InputBox("A Matrisi" & i & "," & j & "Gir", "A
Matrisi")
Next
Next
For i = 1 To M
For j = 1 To N
B(i, j) = InputBox("B Matrisi" & i & "," & j & "Gir", "B
Matrisi")
Next
Next
For i = 1 To M
For j = 1 To N
C(i, j) = A(i, j) + B(i, j)
Next
Next
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
For i = 1 To M
For j = 1 To N
MsgBox("(C" & i & "," & j & ")=" & C(i, j))
Next
Next
End Sub
End Class
ÖDEV: mxn boyutlu iki matrisin çarpımını yapan programı görsel düzeyi yüksek olarak
programlayın
ÖDEV: Rastgele ormanda uçan bir kelebeği yakalayan bir oyun programı hazırlayın.
Dim hiz As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
Dim X, Y As Integer
Randomize()
X = Rnd() * 400
Y = Rnd() * 300
PictureBox2.Location = New Point(X, Y)
End Sub
Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles PictureBox2.Click
'MsgBox("Yakaladın")
'Timer1.Enabled = False
ListBox1.Items.Add(hiz)
hiz = hiz - 200
If hiz > 0 Then
Timer1.Interval = hiz
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
hiz = 1000
Timer1.Interval = Hiz
End Sub
Örnek: Dışarıdan girilen N adet sayıyı sıralayan bir program yazın.
Dim Sayi(100) As Integer
Dim s As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
s=s+1
Sayi(s) = Val(TextBox1.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim i, j As Integer
Dim A As Integer
For j = 1 To s
For i = 1 To s - 1
If Sayi(i) > Sayi(i + 1) Then
A = Sayi(i)
Sayi(i) = Sayi(i + 1)
Sayi(i + 1) = A
End If
Next
Next
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
For i = 1 To s
ListBox1.Items.Add(Sayi(i))
Next
End Sub
Örnek: Dışarıdan alınan n adet sayıyı for each döngüsü kullanarak listeye ekletin.
Dim sayi() As Integer
Dim s As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
ReDim Preserve sayi(s)
sayi(s) = Val(TextBox1.Text)
s=s+1
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
For Each Rakam In sayi
ListBox1.Items.Add(Rakam)
Next
End Sub
ÇİZİM KOMUTLARI
Çizim komutları için aşağıdaki örneği inceleyin
Örnek: Formun üzerine 3 tane butona ekleyin. Bunların her birine tıklayıp Line (doğru),
Circle( Daire), Rectangle (Dikdörtgen) çizim işlemini yaptırın. Bunlardan sadece daireyi
çizerken Picturbox’ın tam ortasına 100 yarıçapında daire çizsin
Public Class Form1
Dim X1, Y1, X2, Y2 As Integer
Dim CizgiRengi As Pen
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
X1
Y1
X2
Y2
=
=
=
=
10
30
150
200
CizgiRengi = Pens.Yellow
PictureBox1.CreateGraphics.DrawLine(CizgiRengi, X1, Y1, X2, Y2)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim R As Integer
R = 100
X1 = PictureBox1.Width / 2 - R
Y1 = PictureBox1.Height / 2 - R
X2 = 2 * R
Y2 = 2 * R
CizgiRengi = Pens.Red
PictureBox1.CreateGraphics.DrawEllipse(CizgiRengi, X1, Y1, X2, Y2)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
X1
Y1
X2
Y2
=
=
=
=
10
30
150
200
CizgiRengi = Pens.LightGreen
PictureBox1.CreateGraphics.DrawRectangle(CizgiRengi, X1, Y1, X2,
Y2)
End Sub
End Class
ÖRNEK 1:Tıklanan noktanın 10 ve 10 ‘un katları şeklinde Label’da x1 ve y1 koordinatlarını
gösteriniz.
Dim x1, y1, a, b As Integer
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
x1 = e.X
y1 = e.Y
a = x1 Mod 10
b = y1 Mod 10
Label1.Text = x1
Label2.Text = y1
Label3.Text = a
Label4.Text = b
If a < 5 Then
x1 = x1 - a
Else : x1 = x1 + (10 - a)
End If
If b < 5 Then
y1 = y1 - b
Else : y1 = y1 + (10 - b)
End If
Label5.Text = x1
Label6.Text = y1
End Sub
ÖRNEK 2: Bir pictureboxüzerinde dışarıdan alınan bir sayıya bağlı olarak o sayının katları
şeklinde noktaları gösteriniz.
Dim sayi, i, j, x, y As Integer
Dim kalem As Pen
Dim ciz As Graphics
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
kalem = New Pen(Color.Blue, 2)
ciz = PictureBox1.CreateGraphics
sayi = Val(TextBox1.Text)
For i = 0 To 300 Step sayi
For j = 0 To 300 Step sayi
x = i
y = j
ciz.DrawEllipse(kalem, x - 1, y - 1, 2, 2)
Next j
Next i
End Sub
ÖRNEK 3: Ekrana önce 20 piksel aralıklarla ızgara noktalarını çizdirelim. Daha sonra Mouse
ile picturebox’ın üzerinde çizgi çizerken bu noktalar üzerinde çizgileri çizdirelim. Ara
değerlerde çizgi çizmesin(Grid aralığı 20 piksel olacak).
Dim kalem As Pen
Dim ciz As Graphics
Dim x, y, i, j As Integer
Dim x1, y1, a, b, x2, y2 As Integer
Dim tiklama As Integer = 1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
kalem = New Pen(Color.Blue, 2)
ciz = PictureBox1.CreateGraphics
For i = 0 To 300 Step 20
For j = 0 To 300 Step 20
x = i
y = j
ciz.DrawEllipse(kalem, x - 1, y - 1, 2, 2)
Next j
Next i
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
kalem = New Pen(Color.Blue, 2)
ciz = PictureBox1.CreateGraphics
x = e.X
y = e.Y
a = x Mod 20
b = y Mod 20
If a < 10 Then
x = x - a
Else : x = x + (20 - a)
End If
If b < 10 Then
y = y - b
Else : y = y + (20 - b)
End If
If tiklama = 1 Then
x1 = x
y1 = y
tiklama = 2
ElseIf tiklama = 2 Then
x2 = x
y2 = y
tiklama = 1
ciz.DrawLine(kalem, x1, y1, x2, y2)
End If
End Sub
ÖRNEK 4: Örnek 3’te verilen uygulamada çizilen her çizgiyi diziye kaydedin. Bir temizleme
butonuyla Picturebox temizlendikten sonra “Yeniden Çiz” butonuyla aynı duvarları tekrar
çizdirin.
Dim kalem As Pen
Dim ciz As Graphics
Dim x, y, i, j As Integer
Dim x1, y1, a, b, x2, y2 As Integer
Dim tiklama As Integer = 1
Dim cizgi(100, 3) As Integer
Dim k, s, t As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
For i = 0 To 300 Step 20
For j = 0 To 300 Step 20
x = i
y = j
ciz.DrawEllipse(kalem, x - 1, y - 1, 2, 2)
Next j
Next i
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
x = e.X
y = e.Y
a = x Mod 20
b = y Mod 20
If a < 10 Then
x = x - a
Else : x = x + (20 - a)
End If
If b < 10 Then
y = y - b
Else : y = y + (20 - b)
End If
If tiklama = 1 Then
x1 = x
y1 = y
tiklama = 2
ElseIf tiklama = 2 Then
x2 = x
y2 = y
tiklama = 1
ciz.DrawLine(kalem, x1, y1, x2, y2)
k = k + 1
cizgi(k, 0) = x1
cizgi(k, 1) = y1
cizgi(k, 2) = x2
cizgi(k, 3) = y2
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
PictureBox1.Image = Nothing
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
For s = 1 To k
ciz.DrawLine(kalem, cizgi(s, 0), cizgi(s, 1), cizgi(s, 2),
cizgi(s, 3))
Next s
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
kalem = New Pen(Color.Blue, 2)
ciz = PictureBox1.CreateGraphics
End Sub
ÖRNEK 5: 25 Piksellik aralıklarla ızgarayı gösterin. Daha sonra Mouse ile herhangi bir
noktaya tıklanıp buna en yakın olan ızgara noktası üzerine bir daire çizdirin. Bu daire fareyi
temsil etsin. Başka bir butona tıklayarak fare 25 piksellik aralıklarla rasgele hareket etsin.
Dim kalem As Pen
Dim ciz As Graphics
Dim x, y, i, j As Integer
Dim x1, y1, a, b, x2, y2 As Integer
Dim tiklama As Integer = 1
Dim cizgi(100, 3) As Integer
Dim k, s, t As Integer
Dim farex, farey As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
For i = 0 To 300 Step 25
For j = 0 To 300 Step 25
x = i
y = j
ciz.DrawEllipse(kalem, x - 1, y - 1, 2, 2)
Next j
Next i
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
x = e.X
y = e.Y
a = x Mod 25
b = y Mod 25
If a < 12.5 Then
x = x - a
Else : x = x + (25 - a)
End If
If b < 12.5 Then
y = y - b
Else : y = y + (25 - b)
End If
farex = x
farey = y
ciz.DrawEllipse(kalem, farex - 10, farey - 10, 20, 20)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
kalem = New Pen(Color.Blue, 2)
ciz = PictureBox1.CreateGraphics
farex = 200
farey = 200
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
Randomize()
s = Rnd() * 3
If s = 0 Then
farex = farex + 25
farey = farey + 0
End If
If s = 1 Then
farex = farex + 0
farey = farey - 25
End If
If s = 2 Then
farex = farex - 25
farey = farey + 0
End If
If s = 3 Then
farex = farex + 0
farey = farey + 25
End If
ciz.DrawEllipse(kalem, farex - 10, farey - 10, 20, 20)
End Sub
MENÜ VE ARAÇ ÇUBUKLARI (MENUS &
TOOLBARS)
Programlarımızı daha görsel hale getirmek için Menus (Menü) , Toolbars (Araç Çubuğu) ,
Status Bar (Durum Çubuğu) gibi elemanlar kullanabiliriz. Bu işlem için Yan taraftaki
Toolbox (araç kutusu) ndan elemanı seçip formun üzerine bırakırız. Ve resimlerde olduğu gibi
gerekli ayarlamaları yaparız.
Menü Ekleme
Public Class Form1
Private Sub KapatCtrlZToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
KapatCtrlZToolStripMenuItem.Click
End
End Sub
Private Sub YeniToolStripMenuItem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles YeniToolStripMenuItem.Click
MsgBox("Merhaba")
End Sub
End Class
VB.NET DE DATABASE KULLANIMI
.NET ortamı veritabanı ile haberleşirken iki temel yapıyı kullanır. Bunlar.
a) SQL Server .NET Data Provider: SQL server 7.0 sonrası için kullanılır.
b) OLE DB .NET Data Provider: OLE DB destekli veri kaynakları için kullanılır. Microsoft Access,
Oracle, XML document gibi.
Veri tabanıyla bağlantının yapısı şu şekildedir.
Veri Tabanı
Connection
Command
DataAdapter
DataSet
Uygulama
Bunları sırayla açıklayalım.
OLEDBCONNECTION (bağlantı)
Burada OleDb veri tabanıyla bağlantıda kullanılan Nesnedir. OleDbConnection ise bunun bir alt işlemlerini
gören yani bağlantıyı sağlayan bir metoddur. ConnectionString ise bağlantının nasıl yapacağını bildiren
tanımlamalar içermektedir.
Bu tanımlamalar microsoft Access için kulanılırken şöyledir.
Provider= Microsoft.Jet.OLEDB.4.0
Data Source= Veri tabanın adresi
Örnek: Access veritabanın açarak bir deneme.mdb isminde bir veri tabanı oluşturun. Bunun içindeki tablonun
adınıda Tablo1 olarak atayın. Tabloların genelikle ilk sütünü primary key olarak atanırki her kayıt için farklı bir
bilgi bulundurur. Böylece kayıtlar karıştırılmaz. Tablonun içinede bilgiler yazın.
VB.net geçip bir form açın ve üzerine bir buton yerleştirin. Butonun içerisine aşağıdaki kodu yazın.
Private Sub Button1_Click(...)
Dim baglantim As New OleDb.OleDbConnection
Try
baglantim.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data
Source=deneme.mdb;"
baglantim.Open()
Catch hata As System.Exception
MsgBox(hata.Message)
End Try
baglantim.Close()
End Sub
Eğer veri tabanını verilen adreste bulduysa herhangi bir şey söylemez. Bulamadıysa aşağıdaki gibi bir hata verir.
VB.net projelerinin kaydedildiği yeri bulun yada ilk projeyi oluştururken çalıştığınız yeri belirleyin. Proje dizini
oluşturulduktan sonra database /bin dizinin içine atın. Zaten verilen bu hata mesajındada database nerede aradığı
gözükmektedir.
OLEDBCOMMAND: (sorgulama)
veri tabanından sorgulama yapmak için kullanılır. Kullanım yeri Connection dan sonra gelir.
Örnek: Aynı örneğin içirisinde Connection satırlarından sonra şu satırları ekleyin.
Private Sub Button1_Click(...)
...
Dim sorgu As New OleDb.OleDbCommand
sorgu.Connection = baglantim
sorgu.CommandText = "SELECT * FROM Tablo1"
baglantim.Close()
End Sub
OLEDBDATAREADER: (bilgileri geçici yükleme)
Veri tabanından okunan bilgiler geçici olarak bu nesneye yüklenir. Bu bir nevi dizidir. Bu nedenle dizinin her
elemanı sütünları ifade eder. Daha sonra bir döngü kullanılarak bilgiler buradan bir Görüntüleme nesnesine
(Datalist, DataGrid) aktarılabilir.
Örnek: Aynı örneğin içirisinde Connection satırlarından sonra şu satırları ekleyin.
Private Sub Button1_Click(...)
...
...
Dim okuyucu As OleDb.OleDbDataReader
'Okuyucu nesnesi oluşturuluyor.
okuyucu = sorgu.ExecuteReader
'Sorguyu çalıştırıyor ve Sorgudan gelen bilgiler
okuyucuya yükleniyor.
Do While okuyucu.Read = True
ListBox1.Items.Add(okuyucu(0) & " " & okuyucu(1) & " " & okuyucu(2) & " " &
okuyucu(3))
Loop
baglantim.Close()
End Sub
Örnek: Veritabanına Access üzerinden kişilerin ad soyad ve yaşlarını girin. Yaşı 20 den büyük olanları
listeletin.
Private Sub Button1_Click(...)
...
...
Dim okuyucu As OleDb.OleDbDataReader
'Okuyucu nesnesi oluşturuluyor.
okuyucu = sorgu.ExecuteReader
'Sorguyu çalıştırıyor ve Sorgudan gelen bilgiler
okuyucuya yükleniyor.
Do While okuyucu.Read = True
If okuyucu(3) > 20 Then
ListBox1.Items.Add(okuyucu(0) & " " & okuyucu(1) & " " & okuyucu(2) & " " &
okuyucu(3))
End If
Loop
baglantim.Close()
End Sub
Bu örnekteki gibi istenilen bilgileri görüntülemek için iki yöntem vardır. Bunlardan birincisi
a)
SQL sorgudan tüm bilgiler okunduktan sonra bunlardan istenilenleri görüntülenir. Burada yapılan bu
şıktır.
b) SQL sorgusu esnasında istenilen bilgiler okunur ve bunlar görüntülenir. Bunu sağlamak için aşağıdaki
şekilde sorgu komutlarını degiştirmeliyiz.
...
...
Dim sorgu As New OleDb.OleDbCommand
sorgu.Connection = baglantim
sorgu.CommandText = "SELECT * FROM Table1 WHERE val(yas)>20"
...
...
NOT: Buradaki kodları denerken bir hata ile karşılaşırsanız hatanın oluştuğu kodu Yukarıda örnek olarak
verildiği gibi mutlaka Try –Catch bloku içinde çalıştırın. Hangi hatanın neden meydana geldiğini türkçe olarak
size söyler.
ÖRNEK 1:ID, ADI, SOYADI ve YAŞ bilgilerini Microsoft Access’te oluşturulan veri
tabanındaki bilgilere göre listeleyen programın kodlarını yazınız.
__
__
__
okuyucu
Visual Basic Formu
sorgu
Access Veritabanı
ID AD SOYAD YAS
baglanti
komut
Imports System.Data.OleDb
Public Class Form1
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
'bağlantı
Dim baglanti As OleDbConnection
baglanti=New OleDbConnection
("provider=microsoft.jet.oledb.4.0;data
source=D:\vt2.mdb")
baglanti.Open()
Bilgileri
Taşıma
Veritabanı
ndan hangi
bilgilerin
alınacağı
Veritabanı
Bağlantısı
LİSTELE BUTONU
'sorgulama
Dim sorgu As String
sorgu= "select * from tablo1"
Dim komut As New OleDbCommand(sorgu, baglanti)
'okuyucu
Dim okuyucu As OleDbDataReader
Bilgileri
Listeleme
okuyucu = komut.ExecuteReader()
" "
While okuyucu.Read = True
ListBox1.Items.Add(okuyucu.Item("ID") & " " & okuyucu.Item("AD") &
&
okuyucu.Item("SOYAD") & " " & okuyucu.Item("YAS"))
End While
'KAPATMA İŞLEMLERİ
okuyucu.Close()
baglanti.Close()
End Sub
End Class
ÖRNEK 2:Yukarıdaki örneğe göre kaydetme işlemini yapan program kodlarını yazınız.
KAYDET BUTONU
Veritabanı
Bağlantısı
Dim baglanti As OleDbConnection
baglanti=New OleDbConnection ("provider=microsoft.jet.oledb.4.0;data
source=D:\vt1.mdb")
baglanti.Open()
Veritabanı
Bağlantısı
Imports System.Data.OleDb
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim sorgu As String
sorgu = "INSERT INTO TABLO1 (AD,SOYAD,YAS) VALUES('" & TextBox1.Text
"' , '"
& TextBox2.Text & "','" & TextBox3.Text & "')"
Dim komut As OleDbCommand
komut = New OleDbCommand(sorgu, baglanti)
komut.ExecuteNonQuery()
&
baglanti.Close()
MsgBox("BİLGİLER EKLENDİ")
End Sub
End Class
ÖRNEK 3:Yukarıdaki örneğe göre ID numarasına göre kayıt bulma(arama) işlemini yapan
program kodlarını yazınız.
Aranan
Kelime
Dim aranan As Integer
aranan = Val(TextBox1.Text)
Veritabanı
ndan hangi
bilgileri
alacağımızı
n ifadesi
Dim sorgu As String
sorgu = "select*from tablo1 where ID like'%" & aranan & "%'"
Dim komut As OleDbCommand
komut = New OleDbCommand(sorgu, baglanti)
Okunan
Bilgilerin
Taşındığı
Kısım
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim yol As String
yol = "provider=microsoft.jet.oledb.4.0;data source=D:\vt1.mdb"
Dim baglanti As OleDbConnection
baglanti = New OleDbConnection(yol)
baglanti.Open()
Dim okuyucu As OleDbDataReader
okuyucu = komut.ExecuteReader
Bilgilerin
Gösterildiği
Kısım
Veritabanı
Bağlantısı
ARAMA BUTONU
While okuyucu.Read = True
TextBox2.Text = okuyucu.Item("AD")
TextBox3.Text = okuyucu.Item("SOYAD")
TextBox4.Text = okuyucu.Item("YAS")
End While
okuyucu.Close()
baglanti.Close()
End Sub
ÖRNEK 4:Yukarıdaki örneğe göre kayıtları güncelleme işlemini yapan program kodlarını
yazınız.
GÜNCELLEME BUTONU
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
Dim yol As String
yol = "provider=microsoft.jet.oledb.4.0;data source=D:\vt1.mdb"
Dim baglanti As OleDbConnection
baglanti = New OleDbConnection(yol)
baglanti.Open()
Dim idguncelleme As Integer
Dim adguncelleme, yasguncelleme, soyadguncelleme As String
idguncelleme = Val(TextBox1.Text)
adguncelleme = TextBox2.Text
soyadguncelleme = TextBox3.Text
yasguncelleme = TextBox4.Text
Dim sorgu As String
'sorgu = "update tablo1 set SOYAD='" & soyadguncelleme & "' where
ID like '%" & idguncelleme & "%'"
sorgu = "update tablo1 set AD='" & adguncelleme & "',SOYAD='" &
soyadguncelleme & "', YAS='" & yasguncelleme & "' where ID like '%" &
idguncelleme & "%'"
'sorgu = "update tablo1 set YAS='" & yasguncelleme & "' where AD
like '%" & adguncelleme & "%' AND SOYAD like '%" & soyadguncelleme & "%' "
Dim komut As OleDbCommand
komut = New OleDbCommand(sorgu, baglanti)
Dim adet As Integer = komut.ExecuteNonQuery()
MsgBox("Güncelleme Tamamlandı")
baglanti.Close()
End Sub
B)DATASET KULLANARAK VERİTABANINDAN BİLGİLERİN OKUNMASI
a)Sadece DataSet Kullanarak Bilgileri Gösterme
ÖRNEK 1:ID, ADI, SOYADI ve YAS bilgilerini Microsoft Access’te oluşturulan veri
tabanındaki bilgilere göre DataSet kullanarak bilgileri listeleyen programın kodlarını yazınız.
OleDbD
ataAdap
ter
Sorgu
OleDbCon
nection
Imports System.Data.OleDb
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'bağlantı
Dim baglanti As OleDbConnection
baglanti = New
OleDbConnection("provider=microsoft.jet.oledb.4.0;data
source=D:\vt1.mdb")
'sorgulama
Dim sorgu As String
sorgu = "select * from Tablo1"
Dim komut As OleDbDataAdapter
komut = New OleDbDataAdapter(sorgu, baglanti)
__
__
__
DataSet
DataSet
Dim veritut As DataSet
veritut = New DataSet
komut.Fill(veritut, "Tablo2")
Visual Basic Formu
sorgu
Access Veritabanı
DataGridView1.DataSource =
veritut.Tables("Tablo2")
End Sub
End Class
ID AD SOYAD YAS
OleDbConnection
OleDbA
dapter
DataGridView
DataView
b)DataSet ve DataView Kullanarak Bilgileri Görüntüleme(DataBinding Nesnesi
Kullanımı)
Listele Butonuna Yazınız
Imports System.Data.OleDb
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
OleDbD
ataAdap
ter
'sorgulama
Dim sorgu As String
sorgu = "select * from Tablo1"
Dim komut As OleDbDataAdapter
komut = New OleDbDataAdapter(sorgu, baglanti)
DataSet
Sorgu
OleDbCon
nection
'bağlantı
Dim baglanti As OleDbConnection
baglanti = New
OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=D:\vt1.mdb")
Dim veritut As DataSet
veritut = New DataSet
komut.Fill(veritut, "Tablo2")
DataSet
Dim verisuz As DataView
verisuz = New DataView
verisuz.Table = veritut.Tables("Tablo2")
DataGridView1.DataSource = verisuz
DataGridView
End Sub
End Class
**Sayfadaki nesnelerin (Textbox vs) DataSet’in sütunlarına bağlanması
Formun Load’ına Yazınız
OleDbCon
nection
'sorgulama
Dim sorgu As String
sorgu = "select * from Tablo1"
DataView
DataSet
OleDbD
ataAdap
ter
'bağlantı
Dim baglanti As OleDbConnection
baglanti = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data
source=D:\vt1.mdb")
Sorgu
Imports System.Data.OleDb
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim komut As OleDbDataAdapter
komut = New OleDbDataAdapter(sorgu, baglanti)
Dim veritut As DataSet
veritut = New DataSet
komut.Fill(veritut, "Tablo2")
Dim verisuz As DataView
Data
Bindings
verisuz = New DataView
verisuz.Table = veritut.Tables("Tablo2")
veritut.Tables(
TextBox1.DataBindings.Add(
TextBox1.DataBindings.Add("Text",
, veritut.Tables(0), "AD")
TextBox2.DataBindings.Add("Text",
TextBox2.DataBindings.Add(
, veritut.Tables(0), "SOYAD")
TextBox3.DataBindings.Add(
TextBox3.DataBindings.Add("Text",
, veritut.Tables(0), "YAS")
DataGridView1.DataSource = verisuz
End Sub
End Class
CURRENCY MANAGER(DATASET ÜZERİNDE
ÜZER NDE YAPILAN UYGULAMALAR)
Burada yapılan tüm işlemler
şlemler (önceki kayıt, sonraki kayıt, kayıt ekle, kayıt sil, ilk kayıt vs.)
DataSet’te gerçekleşmektedir.DataSet’le
şmektedir.DataSet’le yapılan bir işlem
i lem veritabanına yansımamaktadır.
Bu uygulamanın amacı yapmış
yapmı olduğumuz işlemleri daha hızlı bir şekilde
gerçekleştirmektir.Çünkü
tirmektir.Çünkü DataSet üzerinde çalışıldığında
çalı
işlemler
lemler hızlıdır. Eğer
Eğ veritabanıyla
doğrudan çalışsaydık işlemler
şlemler daha yavaş
yava olacaktı.Birçok kişinin
inin network üzerinden ortaklaşa
ortakla
çalıştığı bir ortamda işlemler
şlemler yürütülürken veritabanı üzerinde
üze
çalışmak
şmak yavaş bile olsa uygun
olacaktır.
ÖRNEK:Veritabanındaki
Veritabanındaki bilgiler arasında gezinti yapmamızı sağlayan
sağlayan kayıt
ekleme,güncelleme, silme gibi işlemleri
işlemleri de yapan program kodlarını yazınız.
SONRAKİ KAYIT BUTONU
Private Sub Button2_Click(ByVal
Button2_Click(
sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim cm As CurrencyManager
Dim adet, sira As Integer
cm = Me.BindingContext(ds.Tables(
.BindingContext(ds.Tables("tablo2"))
adet = ds.Tables("tablo2").Rows.Count
ds.Tables(
sira = cm.Position
If sira < adet - 1 Then
sira = sira + 1
cm.Position = sira
Else : MsgBox("son
"son kayıttasınız")
kayıttasınız"
End If
End Sub
ÖNCEKİ KAYIT BUTONU
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim cm As CurrencyManager
Dim adet, sira As Integer
cm = Me.BindingContext(ds.Tables("tablo2"))
adet = ds.Tables("tablo2").Rows.Count
sira = cm.Position
If sira > 0 Then
sira = sira - 1
cm.Position = sira
Else : MsgBox("ilk kayıttasınız")
End If
End Sub
SON KAYIT BUTONU
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Dim cm As CurrencyManager
Dim adet, sira As Integer
cm = Me.BindingContext(ds.Tables("tablo2"))
adet = ds.Tables("tablo2").Rows.Count
sira = cm.Position
If sira <> adet Then
sira = adet
cm.Position = sira
End If
End Sub
İLK KAYIT BUTONU
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
Dim cm As CurrencyManager
Dim sira As Integer
cm = Me.BindingContext(ds.Tables("tablo2"))
sira = cm.Position
If sira <> 0 Then
sira = 0
cm.Position = sira
End If
End Sub
KAYIT EKLE BUTONU
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
Dim cm As CurrencyManager
cm = Me.BindingContext(ds.Tables("tablo2"))
cm.AddNew()
End Sub
KAYIT SİL BUTONU
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button7.Click
Dim sira As Integer
Dim adet As Integer
Dim cm As CurrencyManager
cm = Me.BindingContext(ds.Tables("tablo2"))
adet = cm.Count
If adet > 0 Then
sira = cm.Position
cm.RemoveAt(sira)
MsgBox("KAYIT SİLİNDİ")
Else : MsgBox("SİLİNECEK KAYIT YOK")
End If
End Sub
KAYIT GÜNCELLEME BUTONU
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button8.Click
Dim cm As CurrencyManager
cm = Me.BindingContext(ds.Tables("tablo2"))
cm.EndCurrentEdit()
MsgBox("değişiklikler güncellendi")
End Sub
KAYIT FİLTRELEME İŞLEMLERİ
Birçok durumda kayıtların tamamına değil de sadece belirli kriterlere uyan kayıtların listesi
istenebilir. Bu gibi durumlarda filtreleme (RowFilter Methodu) işlemi gerçekleştirilir.
ÖRNEK: ID, AD, SOYAD ve YAS bilgileri Microsoft Access’te oluşturulan veri
tabanındaki bilgilere göre soyadı dışarıdan girilip bu soyada sahip kişilerin bilgilerini
filtreleyen, filtreleme yaptıktan sonra kayıtlar arasında gezinmeyi sağlayan programın
kodlarını yazınız.
Formun Load’ına Yazınız
Sıralama
Yapar
Imports System.Data.OleDb
Public Class Form1
Dim ds As DataSet
Dim dv As DataView
Dim cm As CurrencyManager
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'bağlantı
Dim baglanti As OleDbConnection
baglanti = New
OleDbConnection("provider=microsoft.jet.oledb.4.0;data
source=D:\personel.mdb")
'sorgulama
Dim sorgu As String
sorgu = "select * from Tablo1"
Dim elci As OleDbDataAdapter
elci = New OleDbDataAdapter(sorgu, baglanti)
ds = New DataSet
elci.Fill(ds, "Tablo2")
dv = New DataView
dv.Table = ds.Tables("Tablo2")
dv.Sort = "SOYAD"
DataGridView1.DataSource = dv
End Sub
KAYIT FİLTRELE BUTONU
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
Dim veri As String
veri = TextBox2.Text
dv.RowFilter = "SOYAD='" + veri + "'"
End Sub
SONRAKİ KAYIT BUTONU
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button9.Click
Dim sonraki As CurrencyManager
If (dv.RowStateFilter <> DataViewRowState.None) Then
sonraki = Me.BindingContext(dv)
sonraki.Position = sonraki.Position + 1
End If
End Sub
ÖNCEKİ KAYIT BUTONU
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button8.Click
Dim onceki As CurrencyManager
If (dv.RowStateFilter <> DataViewRowState.None) Then
onceki = Me.BindingContext(dv)
onceki.Position = onceki.Position - 1
End If
End Sub
Filtreleme İşlemlerinde Ve-Veya Mantığı
ÖRNEK:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button11.Click
Dim veri1, veri2 As String
veri1 = TextBox3.Text
veri2 = TextBox4.Text
If RadioButton1.Checked = True Then
dv.RowFilter = "AD='" + veri1 + "' or SOYAD='" + veri2 + "'"
ElseIf RadioButton2.Checked = True Then
dv.RowFilter = "AD='" + veri1 + "' and SOYAD='" + veri2 + "'"
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button12.Click
dv.RowFilter = Nothing
End Sub
DataView Kullanarak Sütun Toplamı Aldırma
ÖRNEK:DataGridView’deki kişilerin yaşlarını toplayıp Label’da gösteren programın
kodlarını yazınız.
Formun Load’ına Yazınız
Imports System.Data.OleDb
Public Class Form1
Dim ds As DataSet
Dim dv As DataView
Dim cm As CurrencyManager
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'bağlantı
Dim baglanti As OleDbConnection
baglanti = New
OleDbConnection("provider=microsoft.jet.oledb.4.0;data
source=D:\personel.mdb")
'sorgulama
Dim sorgu As String
sorgu = "select * from Tablo1"
Dim elci As OleDbDataAdapter
elci = New OleDbDataAdapter(sorgu, baglanti)
ds = New DataSet
elci.Fill(ds, "Tablo2")
dv = New DataView
dv.Table = ds.Tables("Tablo2")
dv.Sort = "soyad"
DataGridView1.DataSource = dv
Dim adet, i, toplam As Integer
adet = dv.Count 'Kayıt Sayısını verir
For i = 0 To adet - 1
toplam = toplam + (dv(i)("yas"))
Next i
Label2.Text = toplam.ToString("##### yıl")
End Sub
End Class
MASTER-DETAİL BAĞLANTISI KURMA
Tablolar Arası İlişki Kurma
vt1.mdb altında iki tablo oluşturun.
1. Tabloya Tablo1 ismini verin.
2. Tabloya Tablo2 ismini verin.
Tablo1 Tablonun Yapısı
NO
Metin
Tablo2 Tablosunun Yapısı
NO
Metin
AD
Metin
VIZE
Sayı
SOYAD
Metin
FINAL
Sayı
Tablolar arasında ilişki kuran nesne DataRelation nesnesidir.
ÖRNEK: Yukarıda verilen bilgilere göre iki tablo arasındaki ilişkiyi aşağıdaki şekilde
gösteren program kodlarını yazınız.
Form’un Load’ına Yazınız.
'ANA TABLO ILE BAGLANTI KURACAK============================================
Dim baglanti As String
baglanti = "Provider=Microsoft.Jet.OleDb.4.0;Data
Source=D:\vt1.mdb"
'Dim ds As DataSet
ds = New DataSet()
Dim sorgu1 As String
sorgu1 = "SELECT * FROM Tablo1"
Dim verial1 As OleDbDataAdapter
verial1 = New OleDbDataAdapter(sorgu1, baglanti)
verial1.Fill(ds, "Tablo10")
'ALT TABLO ILE BAGLANTI KURACAK================================
Dim sorgu2 As String
sorgu2 = "SELECT * FROM Tablo2"
Dim verial2 As OleDbDataAdapter
verial2 = New OleDbDataAdapter(sorgu2, baglanti)
verial2.Fill(ds, "Tablo20")
'ANA TABLO ILE ALT TABLO ARASINDAKI ILISKIYI KURUYOR =========
iliski = New DataRelation("AnaAlt",
ds.Tables("Tablo10").Columns("NO"), ds.Tables("Tablo20").Columns("NO"))
ds.Relations.Add(iliski)
'DATAVIEW VE DATAGRIDVIEW ICERISINDE DATASET IN ICERISINDEKI TABLO10
GORUNTULUYOR.========
goruntu1 = ds.Tables("Tablo10").DefaultView
DataGridView1.DataSource = goruntu1
'HAYALI BIR YENI TABLO OLUSTURUYORUZ.==========================
tablo = New DataTable
Dim sutun1 As DataColumn
sutun1 = New DataColumn("NO")
sutun1.DataType = System.Type.GetType("System.String")
tablo.Columns.Add(sutun1)
Dim sutun2 As DataColumn
sutun2 = New DataColumn("VIZE")
sutun2.DataType = System.Type.GetType("System.String")
tablo.Columns.Add(sutun2)
Dim sutun3 As DataColumn
sutun3 = New DataColumn("FINAL")
sutun3.DataType = System.Type.GetType("System.String")
tablo.Columns.Add(sutun3)
İki tablo arasındaki ilişkinin DataGridView ‘de gösterilmesi
Private Sub DataGridView1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles DataGridView1.Click
Dim AltTablonunAktifSatiri() As DataRow
Dim satir1 As DataRow
Dim satir2 As DataRow
Dim goruntu2 As DataView
Dim i, adet As Integer
Dim yonet As CurrencyManager
yonet = Me.BindingContext(goruntu1)
AktifSatir = yonet.Position
Me.Text = AktifSatir.ToString()
tablo.Clear()
AltTablonunAktifSatiri =
ds.Tables("Tablo10").Rows(AktifSatir).GetChildRows("AnaAlt")
adet = AltTablonunAktifSatiri.Length - 1
For i = 0 To adet
satir2 = AltTablonunAktifSatiri(i)
satir1 = tablo.NewRow()
satir1.ItemArray = satir2.ItemArray
tablo.Rows.Add(satir1)
Next
goruntu2 = New DataView(tablo)
DataGridView2.DataSource = goruntu2
End Sub
BİLGİLERİN RAPORLANMASI
Veritabanı tablo bilgilerine ulaşmak ve bu bilgileri yazıcıya göndermek için projenize Crystal
Reports dökümanı eklemelisiniz. Projenize bu dökümanı eklemek için aşağıdaki adımları
izleyiniz.
1) Öncelikle veritabanınızı hazırlayınız. Daha sonra yeni bir proje sayfası açınız.
2) Project menüsüne tıklayarak açılan seçeneklerden “Add New Item” menüsüne
tıklayınız. Aşağıdaki pencere açılacaktır.
Bu pencereden “Crystal Reports” dökümanını seçip “Add” butonuna tıklayınız.
3)Karşınıza aşağıdaki gibi rapor seçeneklerini gösteren bir ekran görüntüsü gelecektir. Bu
pencereden “Using The Report Wizard” seçeneğini ve Choose an Expert kısmından da
“Standard’ı “ seçiyoruz.
4)Karşınıza gelen yeni pencereden ilk olarak “Available Data Sources” listesinden “Create
New Connection” seçeneğinin solundaki “+” işaretine tıklayın. Daha sonra açılan
seçeneklerden bağlanacağınız veritabanını seçiniz.
Microsoft Access’le bağlantı kuracağımız için OLEDB (ADO) klasörünün solundaki “+”
işaretine tıklayın. Aşağıdaki pencere açılacaktır.
5)Bu pencerede Microsoft Jet 4.0 OLE DB Provider seçeneğini seçerek İleri butonuna
tıklayın.
6)Açılan yeni pencereden DataBase Name kısmındaki butona tıklayarak daha önce
oluşturduğumuz veritabanını bulun. Veritabanını bulduktan sonra Son butonuna tıklayın.
7)Karşımıza gelen pencerede veritabanı içerisindeki tüm tablolar görünecektir. Kullanmak
istediğimiz tabloyu seçip sağ ok tuşuna basarak tablonun Selected Tables kısmında
gözükmesini sağlayın.
8)İleri butonuna tıkladıktan sonra tablonun alanları “Fields” gelecektir. Bunları görmek için
“+” işaretine tıklayın. Hangi sütun başlıklarına ihtiyacınız varsa bunları sağ ok tuşuna basarak
Fields to Display listesinde görünmesini sağlayınız. Sağ taraftaki listeye aktardığınız
sütunların sayfa üzerindeki yerlerini ayarlamak için sağ üst tarafta yer alan aşağı – yukarı
düğmelerini kullanabilirsiniz. İleri tuşuna basarak bu pencereyi kapatın.
9) ”Grouping” ve “Record Selection” sayfalarını İleri düğmesini tıklayarak geçeniz.
10)Açılan “Record Style” (Raporlama Stilleri) penceresinden raporunuza ait stili seçip Son
düğmesine tıklayabilirsiniz.
Bu aşamadan sonra aşağıdaki şekilde uygulamanıza bir adet “rpt” uzantılı sayfa oluşacaktır.
11)Şablonumuz hazırdır. Bu şablonu uygulamamıza eklemeliyiz. Bunun için normal bir
uygulama sayfa açalım.”Project” menüsünden “Add Windows Form” seçeneğini seçiniz.
Gelen pencereden “Windows Form” seçeneğini seçip “Add” düğmesine tıklayınız.
12)Normal uygulama sayfasını göreceğiz. Bu Form2 olacaktır. Daha önceden açılan Form1’e
bir buton ekleyip Form2’yi çağıracağız.Form2’nin içerisinde de hazırladığımız raporlama
sayfası görüntülenecektir.
13)Form2 açıkken sol tarafta “Toolbox” penceresinden “CrystalReportViewer” kontrolünü
sürükleyerek formunuzun üzerine bırakın. Sayfada bu nesne gözükecektir.
13)Formunuza sürüklediğiniz CrystalReportViewer1
kontrolünü seçin. Properties penceresinden “Report
Source(Raporlama Kaynağını)” özelliğinde bulunan
“Browse” seçeneğini tıklayarak daha önceden kaydetmiş
olduğunuz “CrystalReport1.rpt” dosyasını bulun. Şayet
raporunuz aktif klasör içerisinde ise bu pencereden direk
seçebilirsiniz.
14)Şablonumuzu görmüş olacağız.
15)Form1’e bir buton yerleştirip Form2’yi çağıracağız. Bunun için butonun içerisine
aşağıdaki kodları yazınız.
Private Sub Button1_Click(ByVal sender
As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim frm As New Form2
frm.Show()
End Sub
GRAFİK OLUŞTURMAK
“Crystal Report” dökümanlarını kullanarak tablonuza ait verilerin grafiklerini bastırabilirsiniz.
Bunun için önce veritabanını hazırlayınız. Daha sonra aşağıdaki adımları izleyiniz.
3) 1)Yeni bir proje sayfası açınız. Project menüsüne tıklayarak açılan seçeneklerden
“Add New Item” menüsüne tıklayınız. Aşağıdaki pencere açılacaktır.
Bu pencereden “Crystal Reports” dökümanını seçip “Add” butonuna tıklayınız.
3)Karşınıza aşağıdaki gibi rapor seçeneklerini gösteren bir ekran görüntüsü gelecektir. Bu
pencereden “Using The Report Wizard” seçeneğini ve Choose an Expert kısmından da
“Standard’ı “ seçiyoruz.
4)Karşınıza gelen yeni pencereden ilk olarak “Available Data Sources” listesinden “Create
New Connection” seçeneğinin solundaki “+” işaretine tıklayın. Daha sonra açılan
seçeneklerden bağlanacağınız veritabanını seçiniz.
Microsoft Access’le bağlantı kuracağımız için Access/Excel(DAO) klasörünün solundaki “+”
işaretine tıklayın. Aşağıdaki pencere açılacaktır.
5)Açılan yeni pencereden DataBase Name kısmındaki butona tıklayarak daha önce
oluşturduğumuz veritabanını bulun. Veritabanını bulduktan sonra Son butonuna tıklayın.
6)Karşımıza gelen pencerede veritabanı içerisindeki tüm tablolar görünecektir. Kullanmak
istediğimiz tabloyu seçip sağ ok tuşuna basarak tablonun Selected Tables kısmında
gözükmesini sağlayın.
7)İleri butonuna tıkladıktan sonra tablonun alanları “Fields” gelecektir. Bunları görmek için
“+” işaretine tıklayın. Hangi sütun başlıklarına ihtiyacınız varsa bunları sağ ok tuşuna basarak
Fields to Display listesinde görünmesini sağlayınız. İleri tuşuna basarak bu pencereyi
kapatın.
8)”Grouping” ve “Record Selection” sayfalarını İleri düğmesini tıklayarak geçeniz.
9) Açılan “Record Style” (Raporlama Stilleri) penceresinden raporunuza ait stili seçip Son
düğmesine tıklayabilirsiniz.
Bu aşamadan sonra aşağıdaki şekilde uygulamanıza bir adet “rpt” uzantılı sayfa oluşacaktır.
Araç çubuklarında yer alan aşağıdaki nesneyi aktifleştirin.
“Grafik” iconu üzerine Mouse ile tıklayarak aşağıdaki pencerenin açılmasını sağlayın.
“Type” yaprağında yer alan “Chart Type” listesinden verilerinize uygun bir stil seçin.
Ardından “Data” yaprağına geçebilirsiniz.
Yukarıdaki pencerede gösterilen ayarları yaptıktan sonra “Text” yaprağına geçebilirsiniz.
Bu bölümde dilediğiniz alanı değiştirebilirsiniz. Yapmış olduğunuz değişiklikler grafiğiniz
üzerindeki etiketlere yansıyacaktır.”Tamam” düğmesine tıklayarak işlemler son bulacaktır.
Ekran görüntünüz yukarıdaki şekilde olacaktır. Bu şablonu uygulamamıza eklemeliyiz.
Bunun için normal bir uygulama sayfa açalım.”Project” menüsünden “Add Windows Form”
seçeneğini seçiniz. Gelen pencereden “Windows Form” seçeneğini seçip “Add” düğmesine
tıklayınız.
12)Normal uygulama sayfasını göreceğiz. Bu Form2 olacaktır. Daha önceden açılan Form1’e
bir buton ekleyip Form2’yi çağıracağız.Form2’nin içerisinde de hazırladığımız raporlama
sayfası görüntülenecektir.
13)Form2 açıkken sol tarafta “Toolbox” penceresinden “CrystalReportViewer” kontrolünü
sürükleyerek formunuzun üzerine bırakın. Sayfada bu nesne gözükecektir.
13)Formunuza sürüklediğiniz CrystalReportViewer1
kontrolünü seçin. Properties penceresinden “Report
Source(Raporlama Kaynağını)” özelliğinde bulunan
“Browse” seçeneğini tıklayarak daha önceden kaydetmiş
olduğunuz “CrystalReport1.rpt” dosyasını bulun. Şayet
raporunuz aktif klasör içerisinde ise bu pencereden direk
seçebilirsiniz.
14)Şablonumuzu görmüş olacağız.
15)Form1’e bir buton yerleştirip Form2’yi çağıracağız. Bunun için butonun içerisine
aşağıdaki kodları yazınız.
Private Sub Button1_Click_1(ByVal
sender
As System.Object, ByVal e
As
System.EventArgs) Handles
Button1.Click
Dim yeni As New Form2
yeni.Show()
End Sub
VB.NET DE RANDOM DOSYA KULLANIMI
Public Class Form1
Structure sablon
Dim no As Long
Dim ad As String
Dim vize As Byte
Dim final As Byte
End Structure
Dim kayitno As Integer
Dim ogrenci As sablon
Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
'KAYDET
FileOpen(1, "C:\Documents and Settings\Ktef\dosya1.txt", OpenMode.Random,
OpenAccess.ReadWrite, , 200)
kayitno = 0
Do While Not EOF(1) = True
kayitno = kayitno + 1
FileGet(1, ogrenci, kayitno)
Loop
ogrenci.no = Val(TextBox1.Text)
ogrenci.ad = TextBox2.Text
ogrenci.vize = Val(TextBox3.Text)
ogrenci.final = Val(TextBox4.Text)
kayitno = kayitno + 1
FilePut(1, ogrenci, kayitno)
FileClose(1)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
'LISTELEME
FileOpen(1, "C:\Documents and Settings\Ktef\dosya1.txt", OpenMode.Random,
OpenAccess.ReadWrite, , 200)
kayitno = 0
ListBox1.Items.Clear()
Do While Not EOF(1) = True
kayitno = kayitno + 1
FileGet(1, ogrenci, kayitno)
ListBox1.Items.Add(kayitno & "." & ogrenci.no & "," & ogrenci.ad & "," &
ogrenci.vize & "," & ogrenci.final)
Loop
FileClose(1)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
'ARAMA
FileOpen(1, "C:\Documents and Settings\Ktef\dosya1.txt", OpenMode.Random,
OpenAccess.ReadWrite, , 200)
kayitno = 0
ListBox2.Items.Clear()
Do While Not EOF(1) = True
kayitno = kayitno + 1
FileGet(1, ogrenci, kayitno)
If TextBox2.Text = ogrenci.ad Then
ListBox2.Items.Add(kayitno & "." & ogrenci.no & "," & ogrenci.ad & "," &
ogrenci.vize & "," & ogrenci.final)
End If
Loop
FileClose(1)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
'KAYIT SİLME
Dim i As Integer
FileOpen(1, "C:\Documents and Settings\Ktef\dosya1.txt", OpenMode.Random,
OpenAccess.ReadWrite, , 200)
FileOpen(2, "C:\Documents and Settings\Ktef\dosya2.txt", OpenMode.Random,
OpenAccess.ReadWrite, , 200)
kayitno = 0
i=0
Do While Not EOF(1) = True
kayitno = kayitno + 1
FileGet(1, ogrenci, kayitno)
'silinecek kayıt bulunduysa bunu ikinci dosyaya kaydetme
If TextBox2.Text <> ogrenci.ad Then
i=i+1
FilePut(2, ogrenci, i)
End If
Loop
FileClose(1)
FileClose(2)
Kill("C:\Documents and Settings\Ktef\dosya1.txt") 'Harddiskten ana dosyayı
siler
Rename("C:\Documents and Settings\Ktef\dosya2.txt", "C:\Documents and
Settings\Ktef\dosya1.txt") '2. dosya ile 1. dosyanın adını değiştirir.
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
'KAYIT DUZELTME
FileOpen(1, "C:\Documents and Settings\Ktef\dosya1.txt", OpenMode.Random,
OpenAccess.ReadWrite, , 200)
kayitno = 0
Do While Not EOF(1) = True
kayitno = kayitno + 1
FileGet(1, ogrenci, kayitno)
If TextBox1.Text = ogrenci.no Then
ogrenci.no = Val(TextBox1.Text)
ogrenci.ad = TextBox2.Text
ogrenci.vize = Val(TextBox3.Text)
ogrenci.final = Val(TextBox4.Text)
FilePut(1, ogrenci, kayitno)
End If
Loop
FileClose(1)
End Sub
End Class
Public Class Form1
'Alt Degişken yapısı
Structure AltDegiskenler
Dim Ad As String
Dim Soyad As String
Dim Vize As Integer
Dim Final As Integer
Dim Ortalama As Double
End Structure
'Ana degişkeni tanımlıyoruz.
Dim Ogrenci As AltDegiskenler
Dim KayitNo, i, j As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Button1.Click
FileOpen(1,
"C:\Users\icayiroglu\Documents\DENEME\deneme1.txt",
OpenMode.Random, OpenAccess.ReadWrite, , 100)
'Dosyadaki kayit sayısını bulmamızı sağlıyor.
Do While Not EOF(1) = True
i=i+1
FileGet(1, Ogrenci, i)
Loop
KayitNo = i
KayitNo = KayitNo + 1
Ogrenci.Ad = TextBox1.Text
Ogrenci.Soyad = TextBox2.Text
Ogrenci.Vize = Val(TextBox3.Text)
Ogrenci.Final = Val(TextBox7.Text)
Ogrenci.Ortalama = Ogrenci.Vize * 0.4 + Ogrenci.Final * 0.6
FilePut(1, Ogrenci, KayitNo)
FileClose(1)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Button2.Click
FileOpen(1,
"C:\Users\icayiroglu\Documents\DENEME\deneme1.txt",
OpenMode.Random, OpenAccess.ReadWrite, , 100)
'Sonsuz döngü, dosyanın sonu degilken çalışacaktır.
Do While Not EOF(1) = True
j=j+1
FileGet(1, Ogrenci, j)
ListBox1.Items.Add(Ogrenci.Ad & "," & Ogrenci.Soyad & "," &
Ogrenci.Vize & "," & Ogrenci.Final & "," & Ogrenci.Ortalama)
Loop
FileClose(1)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Button3.Click
Dim AranacakAd, AranacakSoyad As String
ListBox2.Items.Clear()
AranacakAd = TextBox11.Text
AranacakSoyad = TextBox10.Text
FileOpen(1,
"C:\Users\icayiroglu\Documents\DENEME\deneme1.txt",
OpenMode.Random, OpenAccess.ReadWrite, , 100)
KayitNo = 0
Do While Not EOF(1) = True
KayitNo = KayitNo + 1
FileGet(1, Ogrenci, KayitNo)
If Ogrenci.Ad = AranacakAd Or Ogrenci.Soyad =
AranacakSoyad Then
ListBox2.Items.Add(Ogrenci.Ad & "," & Ogrenci.Soyad & ","
& Ogrenci.Vize & "," & Ogrenci.Final & "," & Ogrenci.Ortalama)
End If
Loop
FileClose(1)
End Sub
End Class

Benzer belgeler