• 29-03-2010, 00:52:52
    #1
    Arkadaşlar textbox'a para girilirken textboxın keypressini kullanarak parayı basamaklarına ayırmak istiyorum.

    Aradım ama bulamadım maskettexbox falan demeyin benim dediğim kullanıcı parayı girerken her 3 sayıdan sonra "." koyması

    Şöyle birşey yaptım ama bu her 3 sayıdan sonra textboxın en sonuna bir "." ekliyor

            private void txt1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar % 3 == 1)
                {
                    txt1.Text += ".";
                }
            }
    Nereyi değiştirmeliyim ?

    Örnek http://www.hangikredi.com/hangikredi/konut.aspx buradaki kredi tutarı kısmına fiyat girerken görebilirsiniz.
  • 29-03-2010, 11:52:12
    #2
    Sana şimdi bir ol göstereyim
    Diyelim bir web sitesinde böyle bişey gördün anlık formatlama
    veya textbox var üstüne gelince(setfocus) yazı gidiyor üstünden gidince(gotfocus) yazı tekrar geliyor gibi client side işleyen kodların olduğu belli olan birşey yani.
    Hemen o textboxu seçili hale getirip sağ tıklıyorsun "Seçimin kaynak kodunu göster" diyorsun Mesela ben senin gösterdiğinde bunu yaptım ve şu bilgiler geldi :
     <input id="txtKrediTutar" maxlength="9" onkeypress="ValidateNumeric(event)" onkeyup="this.value=FormatNumber(this.value,1);" class="input_xp" style="width: 120px; text-align: right;" type="text"> ;
    Bak şimdi burda ne demek istiyor Maximum girilecek karakter sayısı :9 olan
    Tuşa basıldıgında "ValidateNumeric(event)" adlı fonksiyonu çağıran
    Giriş işlemi bittikten sonra "this.value=FormatNumber(this.value,1);" adlı fonksiyonu çağıran bir TextBox ımız var.

    Bu fonksiyonları bulmak için de yine hiç bir yeri seçmeden sağ tıklayıp kaynağı görüntüle diyoruz
    ve JS kodlarının bağlantı linklerini aşağıdaki gibi görüyoruz :

    <script type="text/javascript" src="JavaScript/jsCommon.js"></script>
    <script type="text/javascript" src="JavaScript/NumericEditYeni.js"></script>
    <script type="text/javascript" src="JavaScript/jsFormatNumber.js"></script>
    <script type="text/javascript" src="JavaScript/RequestParam.js"></script>

    <script type="text/javascript" src="css/flashobject.js"></script>

    <script type="text/javascript">var wid=302,gid=785;</script>
    <script src="http://ad.reklamport.com/scripts/rp.js" type="text/javascript"></script>


    Senin bakman gereken kısmı kırmızı ile işaretledim
    Oraya tıklıyorsun ve Firefox o scripti sana tak diye açıyor.
    Açtıktan sonra bir sürü fonksiyon gelecek ama senin ilgilenmen gerekenler hangisi "ValidateNumeric(event)" ve "this.value=FormatNumber(this.value,1);" fonksiyonları
    Hemen o fonksiyonları buluyoruz. : Aşağıdaki gibiymiş :

       function FormatNumber(num,nCountryCode)
        {       
                var sVal='';
                var minus='';
                var CommaDelimiter='';
    
                
                if (num != '')
                {
                
                try 
               {
    
                   CommaDelimiter = GetCommaDelimiter(nCountryCode);
    
                   if (num.lastIndexOf("-") == 0) { minus='-'; }
    
                   num = FormatClean(num);
    
                   num = parseInt(num);
    
                   var samount = new String(num);
                     
                   for (var i = 0; i < Math.floor((samount.length-(1+i))/3); i++)
                  {
                     samount = samount.substring(0,samount.length-(4*i+3)) + CommaDelimiter + samount.substring(samount.length-(4*i+3));
                   }
    
                }
                 catch (exception) { AlertError("Format Number",e); }
                return minus + samount;
                }
                
                else
                return '';
        }
    Diğer Fonksiyon ise :
     function ValidateNumeric(e) 
      { 
            var keyCode; //var keyCode = window.event.keyCode;
            if (window.event)
                keyCode = event.keyCode
            else
                keyCode = e.which
    
            if (keyCode == 8)//BACKSPACE key
                return;
            if (keyCode == 0)//TAB, Up, Down, Left, Right
                return;
    
            if (keyCode > 57 || keyCode < 48) 
            {
                if (window.event) //IE
                    window.event.returnValue = false; 
                else //Firefox
                    e.preventDefault();
            }
          
      }
    Ama senin bu fonksiyona bakmana gerek yok Çünkü bu sadece uygun değer girilip girlmediğini kontrol ediyor sen bunu keypress olayında bu koddan daha rahat kontrol edebilirsin o yüzden sadece bir önceki fonksiyona bakıyorsun.

    AAA diyorsun birde bakıyorsun ki o fonksiyonda GetCommaDelimiter(nCountryCode); şu isimde bir fonksiyon çağrılmış.
    Hemen onuda görelim diyorsun :
      function GetCommaDelimiter(nCountryCode)
        {
               var sRet='';
               switch (nCountryCode)
               {
                    case 3:   
                       sRet = '*';
                       break;
                    case 2:   
                       sRet = ',';
                       break;
                    default:
                       sRet = ',';
                       break;
                }
              return sRet;
        }
    Herhalde ülkeye göre ayırma karakteri değişiyor o yüzden böyle bişey yapmışlar.
    EEEE diyorsun bize sadece "," karakteri yeter o zaman ne yapıyoruz bu fonksiyonu o scriptden çıkarıp sadece oraya "," koyabiliriz diyorsun.
    Ardından Gelelim kuru fasulyenin faydalarına şimdi ne olacak
    Fonksiyonu iyice inceledikten sonra Sana neresi lazım olacak tespit ediyorsun tabiki şu kısım :
                   num = FormatClean(num); //Burdaki fonksiyon uygun rakam //girildiğine bakıyor yine scriptin içinde var
    
                   num = parseInt(num);
    
                   var samount = new String(num);
                     
                   for (var i = 0; i < Math.floor((samount.length-(1+i))/3); i++)
                  {
                     samount = samount.substring(0,samount.length-(4*i+3)) + CommaDelimiter + samount.substring(samount.length-(4*i+3));
                   }
    
                }
                 catch (exception) { AlertError("Format Number",e); }
                return minus + samount;
    Burayı iyi anlaman lazım catch kısmında uygun format girlilmemişse hata verecek
    EEEEE bunları bulduk ne yapacğız tabiki bunu c# koduna dökeceğiz
    Nasıl mı ayne şöyle :
    int para=int.Parse( TextBox1.Text);
    string formatlipara=TextBox1.Text.Trim();
    
     for (int i = 0; i < Math.Floor((formatlipara.Length-(1+i))/3); i++)
                  {
                     formatlipara = formatlipara.SubString(0,formatlipara.Length-(4*i+3)) + "," + formatlipara.SubString(formatlipara.Length-(4*i+3));
                   }
    
    return formatlipara;
    Dikkat etti isen Substring oluştururken GetCommaDelimiter(nCountryCode) fonksiyonunu kullanmadık neden çünkü bize zaten "," lazım başka ülkenin ayracı bizi ilgilendirmez.
    Direk virgül yazdık geçtik.

    Bitmiştir bunu fonksiyona cevirip textboxta giriş işlemi bittikten sonra çağıracaksın.
    Visual Basic te de aynı bu kodlar sadece noktalı virgül yok ve değişken tanımlaması Dim para as int şeklinde
    Visual Basic .Net ile artık ilglenmedğim için o dilde yazmadım.

    Haydi Kolay gele
  • 29-03-2010, 12:00:35
    #3
    Hocam süpersin çok teşekkürler
    İlk bakışta karışık gibi geldi ama birazdan detaylıca inceliyeceğim. Tekrar teşekkürler.
  • 29-03-2010, 12:05:52
    #4
    star2218 adlı üyeden alıntı: mesajı görüntüle
    Hocam süpersin çok teşekkürler
    İlk bakışta karışık gibi geldi ama birazdan detaylıca inceliyeceğim. Tekrar teşekkürler.
    Sende süpersin