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