none
Wie kann ich die Nummern in Textbox bei Komma trennen? RRS feed

  • Frage

  • Hallo,

    ich habe ein Textbox und ich will  die Nummern ,die ein Benutzeran gegeben hat,trennen.

    Z.B 1234567------->1,234,567

    Wia kann ich das machen?ich habe etwas programmiert aber es funktioniert nicht

    private void textBox1_TextChanged(object sender, EventArgs e)
      {
       int num1 = Convert.ToInt32(textBox1.Text);
       string res2 = String.Format("{0:c}", num1);
       textBox1.Text = res2.ToString();
       
       
      }
    
    

    Mittwoch, 24. November 2010 21:27

Antworten

  • Hallo B.,

    es ist entscheidend, ob Dein gewünschtes Format aufgerufen etwa in England genauso aussehen soll, wie in Deutschland (bzw. den deutschen Regionseinstellungen).

    Wenn man Deine Frage exakt interpretiert wäre es die richtige Lösung, nur die englische Kultur zu benutzen, dann kommen immer "," Zeichen bei den Tausendern. Beipiel-Lösungen:

      TextBox textBox1 = new TextBox();
     textBox1.Text = "1234567"; // Soll: ->1,234,567
    
     CultureInfo enCI = new CultureInfo("en-US");
     CultureInfo deCI = new CultureInfo("de-DE");
     int num1 = Convert.ToInt32(textBox1.Text);
     string resEN = String.Format(enCI, "{0:c}", num1); //$1,234,567.00
     string resDE = String.Format(deCI, "{0:c}", num1); //1.234.567,00 €
     string resDeNoCur = String.Format(enCI, "{0:#,#}", num1); // 1,234,567
    
     Thread.CurrentThread.CurrentCulture = deCI;
     string resDeOhne = String.Format("{0:#,#}", num1); //1.234.567 bei Aufruf mit deutschen Regionaleinst. 
     string resDeOhneFormat = num1.ToString("#,###");  // 1.234.567 Aufruf bei deutschen Regionaleinst.
    
     Thread.CurrentThread.CurrentCulture = enCI;
     string resEnOhne = String.Format("{0:#,#}", num1); // 1,234,567 bei Aufruf mit USA-Regionaleinst. 
     string resEnOhneFormat = num1.ToString("#,###");  // 1,234,567 Aufruf bei US-Regionaleinst.
    


    Wenn Du aber die aktuell abgerufene Kultur (und je nachdem auch noch das Währungszeichen) nehmen willst, ist es ggf. nicht notwendig, eine dedizierte Kultur zu benutzen.


    ciao Frank
    • Als Antwort markiert Babak_bsn Donnerstag, 25. November 2010 21:20
    Donnerstag, 25. November 2010 12:19
  • ich habe gefunden :D

    namespace WindowsFormsApplication1
    {
     public class Form1 : Form
     {
      TextBox tb = new TextBox();
      public Form1()
      {
       tb.TextChanged += new EventHandler(tb_TextChanged);
       Controls.Add(tb);
      }
    
      void tb_TextChanged(object sender, EventArgs e)
      {
       string value = tb.Text.Replace(",", "");
       ulong ul;
       if (ulong.TryParse(value, out ul))
       {
        tb.TextChanged -= tb_TextChanged;
        tb.Text = string.Format("{0:#,#}", ul);
        tb.SelectionStart = tb.Text.Length;
        tb.TextChanged += tb_TextChanged;
       }
      }
     }
    }
    
    

    • Als Antwort markiert Babak_bsn Donnerstag, 25. November 2010 19:21
    Donnerstag, 25. November 2010 19:21

Alle Antworten

  • Try this:

     

     private
     void
     textBox1_TextChanged(object
     sender, EventArgs e)
    {
    int num1 = Convert.ToInt32(textBox1.Text);
    string res2 = String.Format("{0:#,##}" , num1);
    textBox1.Text = res2.ToString();
    }
    Mittwoch, 24. November 2010 22:24
  • Hallo B.,

    es ist entscheidend, ob Dein gewünschtes Format aufgerufen etwa in England genauso aussehen soll, wie in Deutschland (bzw. den deutschen Regionseinstellungen).

    Wenn man Deine Frage exakt interpretiert wäre es die richtige Lösung, nur die englische Kultur zu benutzen, dann kommen immer "," Zeichen bei den Tausendern. Beipiel-Lösungen:

      TextBox textBox1 = new TextBox();
     textBox1.Text = "1234567"; // Soll: ->1,234,567
    
     CultureInfo enCI = new CultureInfo("en-US");
     CultureInfo deCI = new CultureInfo("de-DE");
     int num1 = Convert.ToInt32(textBox1.Text);
     string resEN = String.Format(enCI, "{0:c}", num1); //$1,234,567.00
     string resDE = String.Format(deCI, "{0:c}", num1); //1.234.567,00 €
     string resDeNoCur = String.Format(enCI, "{0:#,#}", num1); // 1,234,567
    
     Thread.CurrentThread.CurrentCulture = deCI;
     string resDeOhne = String.Format("{0:#,#}", num1); //1.234.567 bei Aufruf mit deutschen Regionaleinst. 
     string resDeOhneFormat = num1.ToString("#,###");  // 1.234.567 Aufruf bei deutschen Regionaleinst.
    
     Thread.CurrentThread.CurrentCulture = enCI;
     string resEnOhne = String.Format("{0:#,#}", num1); // 1,234,567 bei Aufruf mit USA-Regionaleinst. 
     string resEnOhneFormat = num1.ToString("#,###");  // 1,234,567 Aufruf bei US-Regionaleinst.
    


    Wenn Du aber die aktuell abgerufene Kultur (und je nachdem auch noch das Währungszeichen) nehmen willst, ist es ggf. nicht notwendig, eine dedizierte Kultur zu benutzen.


    ciao Frank
    • Als Antwort markiert Babak_bsn Donnerstag, 25. November 2010 21:20
    Donnerstag, 25. November 2010 12:19
  • Hallo Frank,

    dein Antwort hat mir eine Idea gegeben. es fuktioniert gut,wenn  dieses Code von mir unter Button-Click gestanden wurde Z.B:

     private void button2_Click(object sender, EventArgs e)
        {
          CultureInfo enCI = new CultureInfo("en-US");
          Thread.CurrentThread.CurrentCulture = enCI;
          int num1 = Convert.ToInt32(textBox1.Text);
          string resEnOhne = String.Format("{0:#,#}", num1);
          textBox1.Text = resEnOhne;
    
        }
    

    aber ich will etwas anderes :wenn der Betreiber die Zaehlen angibt,in Textbox glechzeitig  das Komma gestanden wird. ich habe etwas geschrieben aber es funktioniert nicht richtig.Guck mal:

     private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
          CultureInfo enCI = new CultureInfo("en-US");
          Thread.CurrentThread.CurrentCulture = enCI;
          string num = textBox1.Text;
          string result = num.Replace(",", "");
          double num1 = Convert.ToInt32(result);
          string resEnOhne = String.Format("{0:#,#}", num1);
          textBox1.Text = resEnOhne; 
        }
    
    Vielen Dank

     

    Donnerstag, 25. November 2010 14:17
  • ich habe gefunden :D

    namespace WindowsFormsApplication1
    {
     public class Form1 : Form
     {
      TextBox tb = new TextBox();
      public Form1()
      {
       tb.TextChanged += new EventHandler(tb_TextChanged);
       Controls.Add(tb);
      }
    
      void tb_TextChanged(object sender, EventArgs e)
      {
       string value = tb.Text.Replace(",", "");
       ulong ul;
       if (ulong.TryParse(value, out ul))
       {
        tb.TextChanged -= tb_TextChanged;
        tb.Text = string.Format("{0:#,#}", ul);
        tb.SelectionStart = tb.Text.Length;
        tb.TextChanged += tb_TextChanged;
       }
      }
     }
    }
    
    

    • Als Antwort markiert Babak_bsn Donnerstag, 25. November 2010 19:21
    Donnerstag, 25. November 2010 19:21
  • Hallo B.,

    ich verstehe zwar Dein zweites Posting von der Satzstellung her nicht, aber man sieht IMHO trotzdem, dass Dein Quellcode nicht in anderen Kulturen funktioniert. In textBox1.Text kann mal ein "," mal "." in unterschiedlicher Bedeutung stehen (sogar andere Zeichen). Ein Benutzer kann dies festlegen. Aber wenn meine Postings Dir etwas weiterhelfen konnten, freu ich mich trotzdem.


    ciao Frank
    Donnerstag, 25. November 2010 19:41