Sonuçlar 1 to 1 of 1

Konu: Dizi tanımlama,ReDim ile tekrar boyutlandırma,InputBox kullanımı,For döngüsü kurma

  1. #1

    Default Dizi tanımlama,ReDim ile tekrar boyutlandırma,InputBox kullanımı,For döngüsü kurma

    Bu uygulamada butona basılınca bir InputBox üzerinden kaç adet sayı toplanacağını alan ve istenilen adette InputBox üreterek sayıları toplayan, işlemi ise bir Label içerisine yazan programı Visual Basic ile kodladık.
    InputBox nesnesi; Visual Basic programlama dili içerisinde, dışarıdan bilgi girişi için bir pencere açarak, mesaj vermemizi ve bir TextBox yardımı ile veri girişi yaptırmamızı sağlamaktadır.

    InputBoxların genel ifadesi şu şekildedir:

    #InputBox

    InputBox (Mesaj, Başlık, Hazır Mesaj, X konumu, Y konumu)

    Burada Mesaj,Başlık,Hazır Mesaj String yani metin türünde olmak zorundadır. Virgüllerle alanların ayrıldığına dikkat edilmelidir. X ve Y konumları ise InputBox' ın ekrandaki konumunu belirler. Sol Üst ekran köşesi X=0,Y=0 konumundadır.

    Örnek bir InputBox ayarı ve görünümü
    Kod:
     deger = InputBox("Mesaj", "Başlık", "Girdi", 200, 300)


    InputBox' a girilecek değeri burada deger isimli değişkene aktardık. Dönen değere bağlı olarak uygun değişken türü belirlenmelidir. Aksi halde program hata üretecektir.

    Örnek uygulamamız içerisinde dinamik bir dizi değişkeni tanımlanmıştır. Boyutu belli olmayan dizinin program içerisinde boyutu belirlendiğinde ReDim deyimi ile tekrar boyutlandırılması sağlanabilir. Bu boyutlandırma işlemi yapılmadığında program "Nesne başvurusu bir nesnenin örneğine ayarlanmadı" "NullReferenceException" hatası üretmektedir.

    İlgili hata aşağıda görülmektedir:




    Fakat kaç sayının toplanacağı bilgisi alındıktan sonra dinamik dizi büyüklüğü ReDim deyimi ile tekrar belirlenirse bu sorun ortadan kalkmaktadır.

    Programın çalışması aşağıdaki gif dosyasında görülmektedir:



    Kodların açıklamaları ise aşağı gösterilmiştir.


    Kod:
    Public Class Form1
        Dim sayi(), tur, toplam As Integer 'dinamik sayi dizisi, tur değişkeni, toplam değişkeni tamsayı türünde tanımlandı.
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Butona tıklama olayı başlangıcı
            Label1.Text = "" 'Başlangıçta Label boş olsun.www.ilerikontrol.com
            tur = InputBox("Kaç adet sayı?", "Başlık", "", 350, 300) 'Kaç sayı toplanacağı bilgisi alındı ve tur değişkenine aktarıldı.
            ReDim sayi(0 To tur - 1) 'Tur değişkenine göre sayi dizisi yeniden boyutlandırıldı. Diziler sıfırdan başladığı için tur-1 e göre boyutlandırıldı.
            For i As Integer = 0 To tur - 1 Step 1 'i sayaç değişkenimiz 0 dan başlasın ve tur-1 e kadar devam etsin.
                sayi(i) = InputBox(CStr(i + 1) + ".sayiyi giriniz", CStr(i + 1) + ".sayı", "", 350, 300) 'sayi(0) dan başlayarak dizi elemanları alındı.
                toplam = toplam + sayi(i) 'toplam değere her seferinde yeni girilen sayı eklendi.
                If (Label1.Text = "") Then 'Label1 boş ise başına + koymadan ilgili sayiyi yaz.
                    Label1.Text = CStr(sayi(i)) 'www.ilerikontrol.com
                Else 'Label1 dolu ise ilgili sayıyı başına + koyarak yazdırıyoruz.
                    Label1.Text = Label1.Text + " + " + CStr(sayi(i)) 'CStr ile sayı değişkeni metine çevirildi. Çünkü metin birleştirme yapıyoruz.
                End If 'If bloğu sonu
            Next 'For döngüsünde sonraki değere geçilir. Ta ki i sayacı son değere ulaşana kadar. Son değerdeyse sonraki satırdan devam eder.
            Label1.Text = Label1.Text + " = " + CStr(toplam) 'Label' a son olarak = işareti konularak toplam değer yazılıyor.
        End Sub
    End Class
    Burada metin birleştirmelerinin yapıldığı bazı ifadeleri detaylı incelemekte fayda görüyorum.

    Kod:
    sayi(i) = InputBox(CStr(i + 1) + ".sayiyi giriniz", CStr(i + 1) + ".sayı", "", 350, 300)
    Burada konumu 350 ye 300 olan ve Mesaj kısmında metin birleştirme ile dinamik olarak kaçıncı sayının girileceğini gösteren bir yapı kullandık. #InputBox açıklamasının yer aldığı kısma bakarsınız parantez içerisindeki ilk virgüle kadar olan kısıma Mesaj yazılır. Mesaj içeriği InputBox' a girilecek değere ilişkin bir soru veya açıklayıcı bir cümle olabilir. Biz bu kısıma dinamik metin birleştirme kullanarak, for döngüsünün döndürdüğü i değerini metine dönüştürerek yazdırdık. Hemen sonrasındaki + operatörü, metin ifadeleri veya metin türünde değişken-ifade arasına yazılırsa metin birleştirme yapmaktadır. Burada CStr(i+1) yazdık çünkü dizilerin genel yapısından dolayı ilk dizi değişkeni 0 olarak numaralandırılmakta fakat biz 1 den saymaya başlamaktayız. Bundan dolayı CStr(i+1) ifadesi ile i değerine 1 eklenerek metin formatına dönüşümü CStr() fonksiyonu ile sağlanmıştır.

    + operatöründen sonra tırnak içerisinde sabit olan metnimizi ".sayıyı giriniz" şeklinde yazdık. Bir sonraki başlık metninin yazılacağı kısımda da aynı mantık kullanılmıştır.

    Kod:
    CStr(i + 1) + ".sayı"
    If karar verme yapısını kullanmaktaki amacımız ise Label boş iken metnimizin hemen başına + ifadesi eklenmesine engel olmaktır. Label' a ilk değer girildikten sonra + işaretleri eklenmektedir. Toplamın yazıldığı kısımda da bir önceki Label metnine eşittir (=) ifadesi eklenmiştir. Sonuç eşittir karakterinden sonra verilmeye çalışılmıştır.

    Önizlemeyi gif dosyasından inceleyebilir, düşüncelerinizi yorum olarak yazabilirsiniz.
    Dinamik diziler için ReDim deyiminin kullanımı ve InputBox ile For döngüsü için bir örnek olarak yazılmıştır. Geliştirilecek bir çok yönü bulunmaktadır. Farklı yöntemlerle de uygulanabilir.

    Not: Dizi değişkeni kullanmadan da yapılabilen bu örnekte, dinamik dizilerin de anlaşılması adına ReDim deyimi ile birlikte çözüm gösterilmiştir.

    Kaynaklar:
    http://alibal.blogcu.com/diziler-visual-basic/9312398
    https://www.vbtutor.net/vb2012/vb2012_lesson12.html
    https://docs.microsoft.com/tr-tr/dot...next-statement
    https://docs.microsoft.com/tr-tr/dot...atures/arrays/
    Last edited by Elektronik; 24-12-18 at 16:05. Sebep: dizisiz de yapılabilir.

Tags for this Thread

Bookmarks

Gönderme izinleri

  • Yeni Konu açamazsınız
  • Konulara cevap yazamazsınız.
  • Eklenti gönderemezsiniz.
  • Mesajlarınızı düzenleme izniniz yok.
  •