Benutzer mit den meisten Antworten
Wie kann ich die Nummern in Textbox bei Komma trennen?

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(); }
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
-
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
Alle 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
-
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:
Vielen Dankprivate 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; }
-
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
-
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