Şimdi Ara

C# - Textbox - Para Formatı (otomatik nokta koydurma)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
14
Cevap
0
Favori
16.919
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Textbox a yazılan sayıya 3 satırda bir . (nokta) ve , (virgül) e basıldığında 2 satır ondalıklı sayı girilmesini istiyorum.

    Örneğin :

    111222,33 yazdığımda bunu anında 111.222,33 yazsın istiyorum. Anında kelimesinden kastım yazar yazmaz bu formata dönüştürmek istiyorum. Çok araştırdım fakat her kodda mutlaka bir hataya rastladım.

    maskedtextbox kullanmak istemiyorum önerenler olursa şimdiden belirteyim :)

    Şimdiden teşekkür ederim.



  • Web sitesi ise javascrip kullanabilir, form ise textboxun onkeypress eventinde halledebilirsin

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • onkeypress i kullandım fakat şöyle bir hata oldu:
    Textbox ta en başta 0,00 yazıyor. Kullanıcı yazmaya başladığında virgülün sol tarafını doğru şekilde yazabiliyor. örneğin : 111.222.333,00 yazdık

    Virgülün sağında geçmek için sağ yön tuşuna basmak gerekiyor ve basıldığında diyelim ,25 olacak. 2 ye bastıktan sonra 5 e basıldığında ,25 yazması gerekirken 0,20 nin ardından ,50 yazıyor. Yani ondalıklı kısımda 0,25 yazmak istiyorsak iki kere ok yönüne basmamız gerekecek. Ben bunu istemiyorum. En azından virgülün sağını yazacaksak bir kere yön tuşuna bastığımızda iki haneyi de yazabileyim.

    Ya da şu şekilde olması daha güzel olur. Başta 0,00 yazmasın kullanıcı 111222333,44 yazarken otomatik kendi 111.222.333,44 yapsın. Fakat benim kodumda virgül karakterini görene kadar aradaki noktaları koymuyor. Bilmem anlatabildim mi biraz karışık ifade etmiş olabilirim.

    Kodları koymayı unuttum :

     public partial class Form1 : Form 
    {
    public Form1()
    {
    InitializeComponent();
    textBox1.Text = ",00";
    // textBox1.RightToLeft = RightToLeft.Yes;
    }
    bool ReStart = true;
    decimal para = 0;
    bool OutOfRange = false;
    int index = 0;
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    try
    {
    if (ReStart)
    {
    OutOfRange = false;
    string VirguldenSonra = textBox1.Text.Substring(textBox1.Text.LastIndexOf(','));
    if (VirguldenSonra.Length > 3)
    {
    index = textBox1.SelectionStart - textBox1.Text.LastIndexOf(',');
    if (index < 4)
    {
    VirguldenSonra = VirguldenSonra.Remove(index, 1);
    OutOfRange = true;
    }
    }
    string VirguldenOnce = textBox1.Text.Substring(0, textBox1.Text.LastIndexOf(','));
    string Sonuc = VirguldenOnce + VirguldenSonra;
    para = decimal.Parse(Sonuc);
    }
    ReStart = false;
    // textBox1.Text = para.ToString("N");
    textBox1.Text = para.ToString("###,###.00");
    ReStart = true;
    if (OutOfRange)
    textBox1.SelectionStart = textBox1.Text.LastIndexOf(',') + index - 1;
    else
    textBox1.SelectionStart = textBox1.Text.LastIndexOf(',');
    }
    catch (Exception)
    {
    }

    }

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    e.Handled = char.IsDigit(e.KeyChar) ? false : (int)e.KeyChar == 8 ? false : true;
    if (textBox1.SelectionStart == textBox1.Text.LastIndexOf(',') + 1 && (int)e.KeyChar == 8)
    textBox1.SelectionStart = textBox1.Text.LastIndexOf(',');
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi vüvüzela -- 12 Ekim 2012; 15:29:02 >




  • Misal bankalarin tutar yama ekranlari gibi tl icin textbox kurus icin 2. Bir textbox kullansan. Bankalar bu sekilde kullandigi icin mevcutta bulunan bir userexperienceden faydalanabilirsin

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Kaygerya

    Misal bankalarin tutar yama ekranlari gibi tl icin textbox kurus icin 2. Bir textbox kullansan. Bankalar bu sekilde kullandigi icin mevcutta bulunan bir userexperienceden faydalanabilirsin

    Yapmaya çalıştığım şey mevcut bir programı düzenlemeye çalışmak zaten. 2. bir textbox olmadan yapmam lazım. Bu kadar çok kullanılan birşeyi şuana kadar bulamamış olmama şaşırıyorum. Aramayı bilmiyorum sanırım karşıma hep farklı şeyler çıkıyor.
  • Bende toplantidan ciktim eve geciyorum evden yardimci olurum

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Kaygerya

    Bende toplantidan ciktim eve geciyorum evden yardimci olurum

    İlginiz için teşekkürler bekliyorum.
  • Yapay Zeka’dan İlgili Konular
    Excel de aynı harfleri silme
    10 yıl önce açıldı
    Daha Fazla Göster
  • selamlar projeyi yaptımhttp://www.kaygerya.com/textbox.zip
    adresinden indirebilirsiniz. projeadının picturebox olduguna bakma. zamanında bişey için açmıştım o o projeyi ordan devam ettim :)
  • hatta kodu da kokayım ki ileride arayanlar da faydalansın

    using System; 
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    using System.IO.Ports;
    using System.Text;
    using System.Collections;

    namespace picturebox
    {
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
    //Bunu buraya ekledik tüm işlemler bunun üzerinden yürüyecek
    List<char> txtMoneyValue;
    public MainForm()
    {
    InitializeComponent();
    txtMoneyValue = new System.Collections.Generic.List<char>();
    txtMoney.RightToLeft = RightToLeft.Yes;
    }


    private void txtMoney_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
    if (char.IsDigit(e.KeyChar))
    {

    // txtboxtaki valuenin değerinin bizim listimize aktarılması
    SetValue();
    // listimizdeki valuenin textboxa aktarılması
    SetTextbox();
    }
    else
    {
    e.Handled = true;
    }

    }

    public void SetValue()
    {
    // adım adım listeye aktarım
    txtMoneyValue.Clear();
    for(int i = 0 ; i<txtMoney.Text.Length ; i++)
    {
    txtMoneyValue.Add(txtMoney.Text[i]);
    }
    }

    public void SetTextbox ()
    {
    // boş string tanımladık
    string s = string.Empty;
    //eğer bizim listimizdeki sayı sayısı 2 den büyük ise sonran 2. karakterin önüne virgül atma şeysi
    if (txtMoneyValue.Count > 2)
    {
    // önce listimizdeki tüm virgülleri kaldırdık
    txtMoneyValue.Remove(',');
    // listimizin sondan 3. karakterine gene virgül koyduk
    txtMoneyValue.Insert(txtMoneyValue.Count - 1, ',');
    }


    //mod 3 e göre değer 0 ise . koyalım dedik ama virgülü de unutmadık bu yuzden 5 den büyükse eleman sayısı nokta koyduk
    if (txtMoneyValue.Count >=6)
    {
    // tüm . ları temizliyorum.
    RemovePoints();
    //kaç tane Point koyacağız
    int pointCount = 1+ (txtMoneyValue.Count-6)/3;

    for (int i = 1; i <= pointCount; i++)
    {
    int pointposition = ((txtMoneyValue.Count - 4)-(i*1)) - ((i-1) * 3);
    txtMoneyValue.Insert(pointposition, '.');
    }
    }

    //txtMoneyValue listimizdeki değrleri string yapıyorum ve textboxa atıyorum.
    for (int i = 0; i < txtMoneyValue.Count; i++)
    {
    s += txtMoneyValue[i];
    }
    txtMoney.Text = s;
    //burada cursorun hep en sağda kalmasını sağlıyorum
    txtMoney.SelectionStart = txtMoney.Text.Length;
    }

    private void txtMoney_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
    {
    //eğer silme veya backspaceye basılırsa textboxu sıfırlıyoruz.
    if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back)
    {
    txtMoneyValue.Clear();
    txtMoney.Text = "";
    }
    }

    private void RemovePoints()
    {
    for (int i = 0; i < txtMoneyValue.Count; i++)
    {
    if (txtMoneyValue[i] == '.')
    txtMoneyValue.RemoveAt(i);
    }

    }

    }
    }




  • Teşekkürler %95 istenilen şeyi karşılayan bir program olmuş :) %5 lik kısım neymiş derseniz backspace e basıldığında tüm yazılanları silmesi ama sanırım o da düzeltilebilir çok da önemli değil :) C# konusunda çok fazla bilgim yok ama bu kadar karmaşık olacağını tahmin etmemiştim. herşeyi düşünerek hazırlamışsınız. emeğinize sağlık tekrardan
  • rica ederim. herşi karışmaması açısından ayrı yazdım. onkeyup eventi içinde backspace veya delete ise silme işlemini yapan bir blok var. onları ordan düzeleyebilirsiniz.
  • quote:

    Orijinalden alıntı: Kaygerya

    hatta kodu da kokayım ki ileride arayanlar da faydalansın

    using System; 
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    using System.IO.Ports;
    using System.Text;
    using System.Collections;

    namespace picturebox
    {
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
    //Bunu buraya ekledik tüm işlemler bunun üzerinden yürüyecek
    List<char> txtMoneyValue;
    public MainForm()
    {
    InitializeComponent();
    txtMoneyValue = new System.Collections.Generic.List<char>();
    txtMoney.RightToLeft = RightToLeft.Yes;
    }


    private void txtMoney_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
    if (char.IsDigit(e.KeyChar))
    {

    // txtboxtaki valuenin değerinin bizim listimize aktarılması
    SetValue();
    // listimizdeki valuenin textboxa aktarılması
    SetTextbox();
    }
    else
    {
    e.Handled = true;
    }

    }

    public void SetValue()
    {
    // adım adım listeye aktarım
    txtMoneyValue.Clear();
    for(int i = 0 ; i<txtMoney.Text.Length ; i++)
    {
    txtMoneyValue.Add(txtMoney.Text[i]);
    }
    }

    public void SetTextbox ()
    {
    // boş string tanımladık
    string s = string.Empty;
    //eğer bizim listimizdeki sayı sayısı 2 den büyük ise sonran 2. karakterin önüne virgül atma şeysi
    if (txtMoneyValue.Count > 2)
    {
    // önce listimizdeki tüm virgülleri kaldırdık
    txtMoneyValue.Remove(',');
    // listimizin sondan 3. karakterine gene virgül koyduk
    txtMoneyValue.Insert(txtMoneyValue.Count - 1, ',');
    }


    //mod 3 e göre değer 0 ise . koyalım dedik ama virgülü de unutmadık bu yuzden 5 den büyükse eleman sayısı nokta koyduk
    if (txtMoneyValue.Count >=6)
    {
    // tüm . ları temizliyorum.
    RemovePoints();
    //kaç tane Point koyacağız
    int pointCount = 1+ (txtMoneyValue.Count-6)/3;

    for (int i = 1; i <= pointCount; i++)
    {
    int pointposition = ((txtMoneyValue.Count - 4)-(i*1)) - ((i-1) * 3);
    txtMoneyValue.Insert(pointposition, '.');
    }
    }

    //txtMoneyValue listimizdeki değrleri string yapıyorum ve textboxa atıyorum.
    for (int i = 0; i < txtMoneyValue.Count; i++)
    {
    s += txtMoneyValue[i];
    }
    txtMoney.Text = s;
    //burada cursorun hep en sağda kalmasını sağlıyorum
    txtMoney.SelectionStart = txtMoney.Text.Length;
    }

    private void txtMoney_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
    {
    //eğer silme veya backspaceye basılırsa textboxu sıfırlıyoruz.
    if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back)
    {
    txtMoneyValue.Clear();
    txtMoney.Text = "";
    }
    }

    private void RemovePoints()
    {
    for (int i = 0; i < txtMoneyValue.Count; i++)
    {
    if (txtMoneyValue[i] == '.')
    txtMoneyValue.RemoveAt(i);
    }

    }

    }
    }


    Kralsın kaygerya valla.. teşekkürler paylaştığın için




  • Merhaba arkadaşlar ben bunu denedim omadı.

    txtMoney bunların altını kırmızı çiziyor.

    üzerine gelince ede hata mesajı olarak.

    The name 'txtMoney' does not exist in the current context

    yazıyor. bunu nasıl çalıştıra bilirim.
  • textbox_changed komutunun içine yazılması lazım.Bu sayede kullanıcı her sayı girdiğinde 3.den sonra nokta koydurabilirsin. Virgule basma da if komutunun içinde virgülün ascii kodunu tanımlarsan olur fakat işlem yaptığın yerde sayıyı taratıp virgül ve noktaları atmalısın.Şuan vaktim yok ama iftardan sonra ya da yarın kodunuda koyarım
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.