Microsoft Visual Studio Visual Basic Timer İle arka plan renk değişimi Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Timer1.Enabled = True Timer1.Interval = 1000 'milisaniye Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Dim rastgele As New Random() Dim r As Integer = rastgele.next(256) Dim g As Integer = rastgele.next(256) Dim b As Integer = rastgele.next(256) RectangleShape1.FillColor = Color.FromArgb(r, g, b) 1
İf -.Return Örneği Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If TextBox1.Text = "" Then MsgBox("Lütfen Bir Değer Giriniz", MsgBoxStyle.Critical, "Hata") Return 'Koşul gerçekleştiği sürece uyarı mesaj kutusunu aç ve uyarı ver For i = 0 To ListBox1.Items.Count - 1 If ListBox1.Items(i.ToString()) = TextBox1.Text Then MsgBox("Girilen Kayıt Listede Mevcuttur!", MsgBoxStyle.Critical, "Hata") Return Next ListBox1.Items.Add(TextBox1.Text) Label1.Text = "Kayıt Sayısı : " & ListBox1.Items.Count.ToString() Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ListBox1.Items.Remove(ListBox1.SelectedItem) Label1.Text = " Kayıt Sayısı" & ListBox1.Items.Count.ToString() End Class Koşul sağlandığında belirtilen işlemler yapılacak ve başa dönüm koşul tekrar kontrol edilecek. Koşul gerçekleşmiyorsa bir sonraki komut alanına gidecektir. Metotlar Nesneye dayalı programlama dillerinin yapı taşlarından biri de metotlardır. Metotlar programımızın fiili, yani yaptığı istir; olmazsa olmazıdır. İnsanı bir program olarak düşünürsek yürümek, konuşmak, bakmak... insani metotları olur. Başka bir değişle metot, belli bir isi yapmak için oluşturulan program parçasıdır. Alt programdır. Örneğin yazdığımız uygulamanın bir çok yerinde faktöriyel hesabi yapmamız gerekiyorsa, bunu bir metot olarak bir kere yazarız ve lazım olduğu her yerde, çağırmak suretiyle tekrar tekrar kullanırız. Bu bize hem zaman hem de programımıza performans kazandıracaktır. Zaten nesnesel programlamanın amacı da bu kolaylığı ve kullan işliği sağlamaktır 2
Sub Belirli bir tekrar gerektiren komutları her defasında yeniden yazmak yerine bir prosedür içinde bir kere yazar ve ihtiyacımız olduğunda çağırırız. Bütün çalışabilen kodlar mutlaka Sub prosedürün içinde olmalıdır. Bir Sub prosedürü Modüle, Class, Interface veya Structure içinde tanımlayabiliriz fakat bir Sub procedür içinde başka bir Sub tanımlanamaz. Kullanımı: Sub isim (Parametreler) Komut veya komutlar Sub Sub KaresiniAl() Dim b As Integer Dim a As Integer = InputBox("Karesi alınacak sayeyi gir") b = a * a MsgBox(a & " Karesi: " & b) 3
Sub InputBox ile girilen bir sayının karesini alıyor. Çağırmak için Karesini Al() yazmamız yeterli. Bu verdiğim örnekteki metot dışarıdan parametre almıyor. Bazı metotlar ise bizim verdiğimiz değerleri islemek içindir. Ayni metodu bir de parametre alacak şekilde, yani dışarıdan değer alacak şekilde yapalım: Sub KaresiniAl(ByVal sayi As Integer) Dim kare As Integer kare = sayi * sayi MessageBox.Show(sayi & " sayisinin karesi: " & kare) Function-End Function Bu tür metotlar Sub metotların taşıdığı bütün özellikleri taşırlar; farklı olarak Procedure içinde meydana gelecek değer, Procedure çağrıldıktan sonra herhangi bir değişken veya kontrole atanır. Bu yüzden döndürülecek değer Return ifadesi kullanılarak döndürülür. Ayrıca dönecek olan değerin veri tipini de belirtmemiz gerekir. Kullanımı : Function isim ( Argümanlar) as Dönecek olan değerin veri tipi Komutlar Return dönecek olan değer End Funciton Bir fonksiyon End Function satiri ile biter. Ancak bazi sartlar gerçekleştiğinde fonksiyonun çalışmasını bitirmeden çıkmak için Exit Function kullanılabilir. 4
Function-End Function Function Faktoriyel( ByVal f As Integer) As Integer Dim a, b As Integer a = 1 For b = 1 To f a = a * b Next Return a End Function Return nedir? Fonksiyonumuzdan dönecek değerin ne olmasını istiyorsanız Return ile onu yazın. Yani Return ile dönecek olan değeri belirleriz. Bu durumda 'a' değişkeniydi, fakat isteseydik 5 gibi bir sayi da döndürebilirdik. Fakat dönecek değerin, fonksiyonumuzu ilk basta belirttiğimiz tipten olmalı (bu örnekte Integer). Not: Metotlarımızı oluştururken Private veya Public gibi anahtar kelimeleri kullanmadık. Bu durumda varsayılan olarak Public olacaktır. Bu da metotlarımızın forum içinden de forum dışından da kullanılabileceğini gösterir. Private olarak tanımlasaydık yalnızca o forum/sınıf içinde kullanabilirdik. ByVal ve ByRef ByRef olarak tanımlanmış parametrelerde parametrenin değeri değil, o parametrenin bellekteki adresi gönderilir. Dolayisiyla bu parametreye atanan değer ayni bellek bölgesinde değişiklik yapacağı için fonksiyonu çağıran yer de bu değişimden etkilenir. 5
Örnek Sub Abc(ByRef x As Integer) x = 13 Abc() metodunu cagirip parametre olarak 'x' için, örneğin 10 değerini verelim: Dim Sayi As Integer Sayi = 10 Abc(Sayi) MsgBox(Sayi) Sonuç: 13'tür. Çünkü referans olarak bize dogrudan 'x' degiskenin adresi verildi. Bunu bir de ByVal ile yapalim: Sub Abc(ByVal x As Integer) x = 13 Dim Sayi As Integer Sayi = 10 Abc(Sayi) MsgBox(Sayi) Sonuç: 10'dur. Çünkü ByVal olarak tanımlanmış parametrelerde fonksiyona parametrenin ('x') adresi değil bir kopyası gönderilir. Yani farklı bir bellek bölgesi. Bu iki kopya ayrı bellek bölgelerini kullanacaklarından parametrenin fonksiyon içindeki değişiminden çağıran yer etkilenmez. 6
VSscroll,random ve Function Kullanımı Public Class Form2 Dim r, g, b As Integer Sub islem() r = VScrollBar1.Value g = VScrollBar2.Value b = VScrollBar3.Value TextBox1.Text = r TextBox2.Text = g TextBox3.Text = b TextBox4.Text = "RGB(" & r & "," & g & "," & b & ")" kare.fillcolor = Color.FromArgb(r, g, b) TextBox5.Text = "#" & hexcevir(r) & hexcevir(g) & hexcevir(b) Private Sub VScrollBar1_Scroll(sender As Object, e As ScrollEventArgs) Handles VScrollBar1.Scroll Call islem() Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub VScrollBar2_Scroll(sender As Object, e As ScrollEventArgs) Handles VScrollBar2.Scroll Call islem() Private Sub VScrollBar3_Scroll(sender As Object, e As ScrollEventArgs) Handles VScrollBar3.Scroll Call islem() Function hexcevir(byval rnk As Integer) Dim renk() As String = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"} Dim s1, s2 As Integer s1 = Int(rnk / 16) s2 = rnk - (s1 * 16) hexcevir = renk(s1) & renk(s2) End Function End Class 7
Linklabel ve process kullanımı Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If TextBox1.Text.Substring(0, 7) = "http://" Then LinkLabel1.Text = TextBox1.Text Else LinkLabel1.Text = "http://" + TextBox1.Text Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked Dim prs As New System.Diagnostics.Process() prs.startinfo.filename = LinkLabel1.Text prs.start() DateTime Kullanımı Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load Label1.Text = DateTime.Today.ToShortDateString() Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim t As DateTime, y As DateTime t = Convert.ToDateTime(Label1.Text) y = t If RadioButton1.Checked Then y = t.adddays(convert.toint32(textbox1.text)) If RadioButton2.Checked Then y = t.addmonths(convert.toint16(textbox1.text)) If RadioButton3.Checked Then y = t.addyears(convert.toint16(textbox1.text)) TextBox2.Text = y.toshortdatestring() 8
Text Dosya İşlemleri Imports System.IO Public Class Form5 Dim fs As FileStream, sr As StreamReader, sw As StreamWriter, satir As String Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click fs = New FileStream(Application.StartupPath & "\veri.txt", FileMode.Open, FileAccess.Read) sr = New StreamReader(fs, System.Text.Encoding.GetEncoding("iso-8859-9")) satir = sr.readline While Not satir Is Nothing TextBox1.Text += satir & vbnewline satir = sr.readline End While sr.close() fs.close() Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click fs = New FileStream(Application.StartupPath & "\veri.txt", FileMode.Create, FileAccess.Write) sw = New StreamWriter(fs, System.Text.Encoding.GetEncoding("iso 8859 9")) sw.writeline(textbox1.text) sw.close() fs.close() End Class Kaynaklar Öğr.Gör.Abdulkadir Koçer / Görsel Programlama-1 İnternet Anonim kaynaklar http://www.yazilimmutfagi.com 9