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.
ahmet abi evde misin ?
hesap makinesi yapmaktan iflahim kesildi
Hocam bilimsel hesap makinesi hakkinda yardimci olursaniz ço sevinirim simdiden tesekkür ederim iyi çalismalar =)
ben gökce millet yha ahmet abi nerdesin 🙁
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
puuzle oyununun nasil yapildigini gösteren makaleyi ahmet arkadasimiz ekledi. http://goo.gl/IgGHi bu linkten erisebilirsiniz
forum.yazilimmutfagi.com adresinde uyeligin varmi demek istiyoruz 🙂
gokce siteyemi uyesin yoksa forumami ? sen bu konuyu foruma soru olarak tasi ordada baska arkadaslar faydalanirlar.
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.
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 🙂
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? )
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 🙂
gökce su linkteki makaleye bir bak bakalim isini gorecekmi
http://www.gorselprogramlama.com/puzzle-oyunu-cnet#more-1232
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.
kardes istedigin olay 5 dakikda yapilacak birsey degil. sen bu konuyu hiç arastirdinmi ? bence seviyenize göre zor bir ödev vermis hocaniz
bu konuda sana ancak ahmet veya hakki yardim edebilir. neredesiniz beylerrr
-Alinti- http://www.csharpnedir.com/articles/read/?id=251 iyi oku iyi uygula
gökce tam olarak ne istiyorsun? biraz daha açiklayici olursan yardimci olmaya çalisiriz.
Tesekkürler güzel bir proje olmus. Eventlarla ilgili sikintim vardi ona çözüm oldu.
merhaba özkan.
ben ekteki projeti indirip denedim. sorunsuz çalisiyor. yeniden indirip denermisin.
bnde hata weriyor =((
If EsittirTiklandi = False Then
burada esitttirtiklandi alti yesil yanio
Merhaba Ihsan,
Ahmet arkadasimiz örnek projeyi siteye ekledi. indirip deneyebilirisin.
Tamam deneyecegim..
Tesekkürler
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.
Ahmet Bey,
Bu kodlarin aynisini kendim de denedim ama "lblDisplay.Text " de hata veriyor bi yardimci olabilir misiniz?