Formatting numbers with events

  • Thread starter Thread starter John Sutor
  • Start date Start date
J

John Sutor

I need some code that, on each keyup event, will take all of the numbers
typed into the text box and format as they type to look like this
100
1,000
10,000
100,000
1,000,000

John S
 
Well, because you are *updating* the numbers in the text-box after the user
inputs, then you'll have to remove your formatting and then reapply your
formatting to get everything to work.

using System;

public class TestFormatting {
private static void Main(string[] args) {
Console.WriteLine(FormatNumber(""));
Console.WriteLine(FormatNumber("1"));
Console.WriteLine(FormatNumber("10"));
Console.WriteLine(FormatNumber("100"));
Console.WriteLine(FormatNumber("1000"));
Console.WriteLine(FormatNumber("10000"));
Console.WriteLine(FormatNumber("100000"));
Console.WriteLine(FormatNumber("1000000"));
Console.WriteLine(FormatNumber("10000000"));

Console.WriteLine(FormatNumber(""));
Console.WriteLine(FormatNumber("1"));
Console.WriteLine(FormatNumber("10"));
Console.WriteLine(FormatNumber("100"));
Console.WriteLine(FormatNumber("1,000"));
Console.WriteLine(FormatNumber("10,000"));
Console.WriteLine(FormatNumber("100,000"));
Console.WriteLine(FormatNumber("1,000,000"));
Console.WriteLine(FormatNumber("10,000,000"));
}

private static string FormatNumber(string number) {
return FormatNumber(number, 3);
}

private static string FormatNumber(string number, int groupLength) {
if ( number == null || number.Length == 0 ) { return ""; }

number = number.Replace(",", ""); // Get rid of old formatting
int commas = (number.Length-1)/groupLength;
int lead = (number.Length-1)%groupLength+1;

string formatted = number.Substring(0, lead);
for(int i = 0; i < commas; i++) {
formatted += "," + number.Substring(i*groupLength + lead,
groupLength);
}

return formatted;
}
}
 
Following is a code snippet. Obviously you'll need to set MaximumLength
property of TextBox to prevent OverflowException.


private void textBox1_KeyUp(object sender,
System.Windows.Forms.KeyEventArgs e)
{
FormatText(this.textBox1.Text);
}


private void FormatText(string number)
{
try
{
long i =
Int64.Parse(number,System.Globalization.NumberStyles.AllowThousands);
this.textBox1.Text = i.ToString("#,0");
this.textBox1.SelectionStart = this.textBox1.Text.Length;
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}


Maqsood Ahmed
Kolachi Advanced Technologies
http://www.kolachi.net
 
Justin,
The problem is not formatitng the number, but formatting it on a key
event (press / down / up). The user wants to be able to start typing
and the numbers start formatting correctly. Your method, which is very
good and I'll use it,will not work as an event handler.

John S
 
Back
Top