vb.net Hesap makinesi

Bundan önceki makalemizde dinamik buton yapimina deginmistik. Örnek olarak da bir hesap makinesi ara yüzü olusturmustuk.

Bu makalede ise hesap makinesini tamamlayacagiz insallah.

Kodlara geçmeden önce kisaca hesap makinemizin islevlerinden bahsetmek istiyorum.

Makinemiz basit bir dört islem makinesi. 0’dan 9’a kadar olan rakamlarin yani sira bir de ’00’ eklemek istedim.

Yanlis yazdigimiz taktirde geri silebilmek için de bir buton ekledim (backslash). Bu tus, islem bittikten sonra çalismayacak, yani yalnizca sayiyi yanlis girdigimizde çalisacak.

Bir adet iptal (C) butonu, bir adet çikis (Exit – E) butonu ve tabii son olarak da ondalik sayilar için bir virgül ekledim.

Islemlerimiz yalnizca ‘=’ tusuna basilinca yapilacak.

Ekrani bir ‘etiket’ten olusturdum. Sonuç çok büyük olursa, ya da bir sayiyi ‘0’a bölmeye kalkarsak kendiliginden tepki veriyor. Textbox’tan daha kullanisli.

Projenin tamamini da makalenin sonuna ekleyecegim. Merak ettiginiz baska sey olursa ‘properties’ penceresinden özelliklere bakabilirsiniz.

Uygulamamizin görünümü:

.

 

Iste kodlar:

Public Class Form1

    Dim sayi1 As Double

    Dim EsittirTiklandi As Boolean = False

    Dim strIslem As String

    Dim Backslash As Boolean = True

    Dim NoktaTiklandi As Boolean = False ‘Birden fazla nokta koymayi engellemek icin

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.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)

            AddHandler btn.Click, AddressOf Butonlar_Calisiyor

            ‘bu satir çok önemli. herhangi bir butona tikladigimizda programimizin bundan haberi olsun istiyorsak bunu bu sekilde belirtmemiz lazim

 

            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

 

    Private Sub Butonlar_Calisiyor(ByVal sender As Button, ByVal e As EventArgs)

 

        Dim strButonum As String

        strButonum = sender.Text

 

        ‘Simdi select-case ile butonlarimin ne is yapacagini belirleyecegim.

        ‘yani, filan butona tiklaninca filan eylem yapilsin… gibi

        Select Case strButonum

            Case "1", "2", "3", "4", "5", "6", "7", "8", "9"

                If EsittirTiklandi = False Then

                    lblDisplay.Text += strButonum

                Else

                    lblDisplay.Text = Nothing

                    lblDisplay.Text += strButonum

                    EsittirTiklandi = False

                End If

                Backslash = True

 

 

            Case "+"

                If lblDisplay.Text <> Nothing Then

                    sayi1 = lblDisplay.Text

                    lblDisplay.Text = Nothing

                End If

                NoktaTiklandi = False

                EsittirTiklandi = False

                Backslash = False

                strIslem = strButonum

            Case "-"

                If lblDisplay.Text <> Nothing Then

                    sayi1 = lblDisplay.Text

                    lblDisplay.Text = Nothing

                End If

                NoktaTiklandi = False

                EsittirTiklandi = False

                Backslash = False

                strIslem = strButonum

 

            Case "*"

                If lblDisplay.Text <> Nothing Then

                    sayi1 = lblDisplay.Text

                    lblDisplay.Text = Nothing

                End If

                NoktaTiklandi = False

                EsittirTiklandi = False

                Backslash = False

                strIslem = strButonum

            Case "/"

                If lblDisplay.Text <> Nothing Then

                    sayi1 = lblDisplay.Text

                    lblDisplay.Text = Nothing

                End If

                NoktaTiklandi = False

                EsittirTiklandi = False

                Backslash = False

                strIslem = strButonum

 

            Case "="

                If lblDisplay.Text <> Nothing Then

                    EsittirTiklandi = True

 

                    Select Case strIslem

                        Case "+"

                            lblDisplay.Text = sayi1 + lblDisplay.Text

                        Case "-"

                            lblDisplay.Text = sayi1 – lblDisplay.Text

                        Case "*"

                            lblDisplay.Text = sayi1 * lblDisplay.Text

                        Case "/"

                            lblDisplay.Text = sayi1 / lblDisplay.Text

                    End Select

                    Backslash = False

                End If

                NoktaTiklandi = False

 

            Case "C"

                lblDisplay.Text = Nothing

                EsittirTiklandi = False

                strIslem = Nothing

                Backslash = False

                NoktaTiklandi = False

            Case "<"

                ‘dat is mijn backslash. dat werkt alleen als ik begonnen ben met een nieuwe getal in te geven.

                ‘dat werkt niet bv. bij de eind resultaat

                If lblDisplay.Text <> Nothing Then

                    If Backslash = True Then

                        lblDisplay.Text = lblDisplay.Text.Remove(lblDisplay.Text.Length – 1)

                    End If

                End If

            Case "00", "0"

                ‘hier enige probleem is dat zonder een andere getal kan ik achterelkaar meerdere ‘0’ zetten (bv.0000).

                If EsittirTiklandi = False And lblDisplay.Text <> Nothing Then

                    lblDisplay.Text += strButonum

                    EsittirTiklandi = False

                Else

                    lblDisplay.Text = Nothing

                    lblDisplay.Text = strButonum

                End If

                Backslash = True

 

            Case ","

                ‘puntje (of komma) was de moeilijkste om de koden te genereren. Maar dat is gelukt 🙂

                If lblDisplay.Text <> Nothing And EsittirTiklandi = False Then

                    If EsittirTiklandi = False Then

                        If EsittirTiklandi = False Then

                            lblDisplay.Text += strButonum

                        Else

 

                            lblDisplay.Text = Nothing

                            lblDisplay.Text += strButonum

                            strButonum = False

                        End If

                        Backslash = True

                        NoktaTiklandi = True

                    End If

                End If

 

            Case "E"

                Me.Close()

                ‘en de winkel is gesloten 🙂

        End Select

    End Sub

End Class

 

 

Baska bir makalede görüsürüz insallah.

Projeyi burudan indirebilirsiniz.

 

25 thoughts on “vb.net Hesap makinesi

  1. Hocam bilimsel hesap makinesi hakkinda yardimci olursaniz ço sevinirim simdiden tesekkür ederim iyi çalismalar =)

     

  2. ya arkiler bu gökçe arkadasimiz pek konuyu dinlememis sanirim ben puzzle yaptim sürükleme degil seçme yöntemi ile kolay ama hem hocalar sadece ögrencilerin gözünde kötüdür ben ce hocamiz mükemmel biri ayrica gökçe n.hakkinda böyle düsündügünü bilmiyordum ögrenmis oldum

  3. gokce siteyemi uyesin yoksa forumami ? sen bu konuyu foruma soru olarak tasi ordada baska arkadaslar faydalanirlar.

  4. Bu zamane gençlerini hiç anlamiyorum! Her sey hemen olsun istiyorlar. 
    Yaz tatiline yakin hazir olur Gökçe  
    Saka bi tarafa, eger hemen istiyorsan sana maille yollayabilmem için foruma üye olur musun? Daha sonra onu genis izahati ile sitede yayinlarim.

  5. tabiki makale olarak 🙂 ben istedigin gibi 12 adet resim olusturdum. bir shrek resmini 3×4 olarak böldüm ve sana mail attim, sen makaleye eklersin 🙂 

  6. Gökçe, sanirim istedigini yaptim. 
    Kodlarinizi nasil istersiniz? Forum sayfasina mi, mail olarak mi, proje olarak mi yoksa yeni bir makale olarak mi?
    (Sabri sana sorsam sonuncusunu seçerdin demi? )
     

     

  7. gokce visual C# ile studio arasindaki fark nedir ya , visual basicmi demek istedin. Bu sirada C#dan vb.nete çeviri yapamiyormusun ? Anladigim kadaryila baya bi baslangiçtasin sen. ya hocanda sorun var yada siz hocanizi hiç dinlememis ve çalismamissiniz 🙂

     

  8. Gökçe hangi pazartesine yetismesi lazim? 11 nisan pazartesiye mi? 
    Daha önce hiç denemedim ama haftasonu bi bakalim. Sen de birseyler bulursan forum sayfamizda paylas ki isimiz daha kolay olsun.

  9. kardes istedigin olay 5 dakikda yapilacak birsey degil. sen bu konuyu hiç arastirdinmi ? bence seviyenize göre zor bir ödev vermis hocaniz 

  10. gökce tam olarak ne istiyorsun? biraz daha açiklayici olursan yardimci olmaya çalisiriz.

  11. Tesekkürler güzel bir proje olmus. Eventlarla ilgili sikintim vardi ona çözüm oldu.

  12.  merhaba özkan.

    ben ekteki projeti indirip denedim. sorunsuz çalisiyor. yeniden indirip denermisin. 

  13. bnde hata weriyor =((

     

    If EsittirTiklandi = False Then

    burada esitttirtiklandi alti yesil yanio

  14. Foruma bir Label ekleyin ve bu label’in ismini (name) properties penceresinden ‘lblDisplay’ olarak degistirin. Properties penceresi çok kullanislidir, orada daha baska özellikler de bulabilirsiniz; onlari degistirerek ne ise yaradigini ögrenmeye çalisiniz.

     kolay gelsin. 

  15. Ahmet Bey,

    Bu kodlarin aynisini kendim de denedim ama "lblDisplay.Text " de hata veriyor bi yardimci olabilir misiniz?

Bir cevap yazın

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