Visual Basic .NET de Dinamik Butonlarla Çalismak

Visual Studio, piyasadaki IDE’ler arasinda belki de en fonksiyonel, en güçlü, en kullanisli IDE’dir.

Bu özellikleri ile programciya büyük kolayliklar sagliyor.

Programci toolbox sayesinde kendisine lazim olan bilesenleri (button, textbox, label…) rahatlikla kullanabiliyor.

Zengin ‘properties’ penceresi sayesinde de bir çok olayi zahmetsizce gerçeklestirebiliyor.

.

Fakat bazen öyle icap ediyor ki, bu bilesenleri ‘dynamic’ olarak tasarlamak zorunda kaliyor. Veya Öylesi daha kullanisli olabiliyor ya da kodlar gelistirilmeye daha müsait hâle gelebiliyor bu sayede.

 

Iste buna binaen bu makalede dinamik buton (dynamic buttons) yapimina deginmek, giris yapmak istiyorum.


Simdi bünyesinde bolca buton ihtiva eden bir örnek tasarlayalim. Mesela bir hesap makinesi: 0’dan 9’a kadar rakamlar, dört islem isaretleri ve esittir, sil, Exit, backslash vs.

 

Projemize yeni bir Windows Form ekleyelim, asagi-yukari makul bir hesap makinesi büyüklügüne getirelim ve formumuza çift tiklayarak kodlarimizi yazmaya baslayalim:

 

Ise ilk önce buton metinleriyle (dikkat edin, isim demiyorum) baslayalim isterseniz.

Ben kendi kafamdan 20 adet buton tasarladim. En sagda dört islem isaretleri (+,-,*,/) ve esittir (=), merkezde çift sifir (00) dahil olmak üzere rakamlarimiz, onlarin altinda ise ‘C’, “Exit”, ‘<<‘ (karakter silme – backslash) gibi bir kaç buton olacak.


Bütün bunlar için ‘ButonMetni’ adinda bir array olusturdum:

 

Dim ButonMetni() AsString = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "<", "0", "00", "/", "E", ",", "C", "="}

 

Tasarim için yapmamiz gereken diger bir sey ise butonlarimizin gelecegi noktanin, yani koordinatlarinin tespiti (x-y noktasi).

X koordinati için:

 

Dim SolNokta AsInteger = 30

 

Y koordinati için:

 

Dim UstNokta AsInteger = 80

 

Ilk butonumuzun, pencerenin soluna uzakligi 30 piksel, üstüne uzakligi ise 80 piksel. Bunu istedigimiz sekilde ayarlayabiliriz elbette.

 

Tasarimimiz kabataslak hazir sayilir. Simdi biraz çalisma zamani!

Bize buton nesnesi lazim. Hemen çagiralim.

Dim btn As Button

‘New’ anahtar sözcügünü henüz kullanmiyorum!

Simdi, bu buton nesnesinden (btn) bize gerekecek kadar üretmeliyiz.

Hemen bir for-next döngüsü ile bu isi halledelim:

 

For i As Integer = 0 To ButonMetni.Length – 1

      btn = New Button

Next

 

Aslinda bana 20 tane button lazim, ‘For i as Integer = 1 to 20’ diyebilirdim. Fakat programa esneklik kazandirmak için, kullanacagim dizinin (array) uzunlugundan yararlaniyorum. Böylece yeni butonlar eklenince uzunluk da kendiliginden artacaktir. Ekstra düzeltmeler yapmama gerek kalmayacak.

 

Simdi sira olusturdugumuz bu yeni butonlara isim verelim, metnini atayalim, yerlerini gösterelim (yerlestirelim) ve en son olarak da formumuza ekleyelim.

 

For i As Integer = 0 To ButonMetni.Length – 1

      btn = New Button

      btn.Name = "btn" & i

      btn.Text = ButonMetni(i)

      btn.Height = 30 ‘Butonun yüksekligi

      btn.Width = 30 ‘Butonun genisligi

      btn.Left = SolNokta

      btn.Top = UstNokta

      Me.Controls.Add(btn)

Next

 

Bu kodlari yazip çalistirdiktan sonra karsimiza tek bir buton çikacaktir. Bunu sebebi bütün butonlari ayni noktaya yerlestirmis olmamizdir
 

Simdi düzme islemini gerçeklestirelim. 4 sütun ve 5 satirdan olussun mesela. Hatta 4 islem ve esittir isaretleri ile diger butonlar arasinda da biraz bosluk birakalim:

For-Next döngüsünün içine devam ediyoruz:

 

If i = 2 Or i = 6 Or i = 10 Or i = 14 Or i = 18 Then

      SolNokta += 55

Else

      SolNokta += 33

End If

If i = 3 Or i = 7 Or i = 11 Or i = 15 Then

      UstNokta += 33

      SolNokta = 30

End If

Ilk ‘If’ blogu satirlarla ilgili; dört islem isaretlerini ayiriyoruz;

ikinci blok ise sütunlarla ilgili; 4 sütun sonra bir satir olusturuluyor.

 

Ben bir de fazladan, göze hos gelsin diye bir font eklemek istiyorum butonlarimiza. Bu da su kodlarla oluyor:

btn.Font = New System.Drawing.Font("Trebuchet MS", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))

 

Bu kodu ezbere bilmeye gerek yok. Visual Studio’nun dizayner’inden çaliyoruz. 🙂

Nasil çalindigini gelecek makalemde anlatirim insallah.

 

Kodlarin tamami:

 

Private Sub Hesap_Makinesi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

        HandlesMyBase.Load()

        Dim ButonMetni() As String = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "<", "0", "00", "/", "E", ",", "C", "="}

        Dim SolNokta As Integer = 30

        Dim UstNokta As Integer = 80

 

        Dim btn As Button

        For i As Integer = 0 To ButonMetni.Length – 1

            btn = New Button

            btn.Name = "btn" & i

            btn.Text = ButonMetni(i)

            btn.Height = 30

            btn.Width = 30

            btn.Left = SolNokta

            btn.Top = UstNokta

            Me.Controls.Add(btn)

 

            If i = 2 Or i = 6 Or i = 10 Or i = 14 Or i = 18 Then

                SolNokta += 55

            Else

                SolNokta += 33

            End If

            If i = 3 Or i = 7 Or i = 11 Or i = 15 Then

                UstNokta += 33

                SolNokta = 30

            End If

            btn.Font = New System.Drawing.Font("Trebuchet MS", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))

        Next

    End Sub

 

Programimizi çalistirdigimiz zaman asagidaki gibi bir ekran karsimiza çikiyor.


 

 

Projenin Kaynak kodlarini asagidaki linkten indirebilirsiniz
.
indirme linki

Bu konunun devamina buradan ulasabilirsiniz.

 

5 thoughts on “Visual Basic .NET de Dinamik Butonlarla Çalismak

  1. Merhaba, 

    Ben comboboxtan öge seçince dinamik olarak textboxlar getiriyorum fakat bunlari tekrar nasil temizleyecegim? 
    comboboxtan baska öge seçtigimde altina ekleme yapiyor. Ben paneli temizleyip yeniden eklemek istiyorum. 
    panel1.controls.clear ise formdaki tüm ögeleri yok ediyor.
  2. o kolay, atayacagin sub i kullanacaksin. adi hedef_sub olsun

    Me.Controls.Add(btn) altina su kodu yazabilirsin

    AddHandler btn, AddressOf hedef_sub

  3. Hocam tamam güzel olmus ama, asil sikinti dinamik olusturdugun buton kontrolüne tiklandiginda isleyecek olan kodlar. Bunlari nasil butonlarin Click Event’ ine atacaksin…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir