Its better to use a NumericUpDown
control with ThousandSeparator
set to true and DecimalPlaces
set to 2, and Maximum
set to the value that you need:
here is result of setting the value: 1234567.89

This way:
- Thousand separator and decimal point will be shown even when data entry.
- You can set minimum and maximum allowed values
- The user can only enter valid number values
- You can set the increment when user clicks on arrows or use arrow keys.
Another thing you should know is that String.Format() and ToString() method works based on Culture, for example:
//Shows value based on your Thread.CurrentThread.CurrentCulture
MessageBox.Show(String.Format("{0:N2}", 123456.78));
//Shows 123,456.78
MessageBox.Show(String.Format(CultureInfo.GetCultureInfo("en"), "{0:N2}", 123456.78));
//Shows 123,456/78
MessageBox.Show(String.Format(CultureInfo.GetCultureInfo("fa"), "{0:N2}", 123456.78));
//Shows result based on your Thread.CurrentThread.CurrentCulture
MessageBox.Show((123456.78).ToString("N2"));
//Shows 123,456.78
MessageBox.Show((123456.78).ToString("N2", CultureInfo.GetCultureInfo("en")));
//Shows 123,456/78
MessageBox.Show((123456.78).ToString("N2", CultureInfo.GetCultureInfo("fa")));