我需要一个文本框:如何使文本框只接受数字并用逗号格式化数字?
(1)只接受数字作为字符。
(2)在用户键入内容时自动继续使用逗号格式化数值。
例如,
1 becomes 1.00
10 becomes 10.00
100 becomes 100.00
1000 becomes 1,000.00
10000 becomes 10,000.00
100000 becomes 1,00,000.00
如何实现这一目标?
我需要一个文本框:如何使文本框只接受数字并用逗号格式化数字?
(1)只接受数字作为字符。
(2)在用户键入内容时自动继续使用逗号格式化数值。
例如,
1 becomes 1.00
10 becomes 10.00
100 becomes 100.00
1000 becomes 1,000.00
10000 becomes 10,000.00
100000 becomes 1,00,000.00
如何实现这一目标?
格式化数而用户在一般的作品打字很差。你应该为此使用一个MaskedTextBox。大量关于互联网的代码显示了如何过滤KeyPress,因此只能输入数字。其中大部分通过使用粘贴命令被平庸击败。
理智的方法是对待有能力输入数字等基本技能的用户,并轻轻提醒她她错了。验证事件是为此做出的。这也是格式化数字的最佳时机。添加一个新类到您的项目并粘贴此代码:
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class NumberBox : TextBox {
public NumberBox() {
Fraction = 2;
}
public ErrorProvider ErrorProvider { get; set; }
[DefaultValue(2)]
public int Fraction { get; set; }
public event EventHandler ValueChanged;
public decimal Value {
get { return this.value; }
set {
if (value != this.value) {
this.value = value;
this.Text = Value.ToString(string.Format("N{0}", Fraction));
var handler = ValueChanged;
if (handler != null) ValueChanged(this, EventArgs.Empty);
}
}
}
protected override void OnValidating(CancelEventArgs e) {
if (this.Text.Length > 0 && !e.Cancel) {
decimal entry;
if (decimal.TryParse(this.Text, out entry)) {
if (ErrorProvider != null) ErrorProvider.SetError(this, "");
Value = entry;
}
else {
if (ErrorProvider != null) ErrorProvider.SetError(this, "Please enter a valid number");
this.SelectAll();
e.Cancel = true;
}
}
base.OnValidating(e);
}
protected override void OnEnter(EventArgs e) {
this.SelectAll();
base.OnEnter(e);
}
private decimal value;
}
编译。将新的NumberBox控件从工具箱的顶部拖放到您的表单上。还可以在窗体上放置一个ErrorProvider,这样可以以适度的方式报告输入错误,并设置新控件的ErrorProvider属性。可以选择修改Fraction属性。您可以订阅ValueChanged事件以了解该值何时被修改。
有一个非常简单的方法:使用TextChanged和Leave事件。
private void textBox_TextChanged(object sender, EventArgs e)
{
decimal theNumber;
if(!decimal.TryParse((sender as TextBox).Text, out theNumber))
{
(sender as TextBox).Text = string.empty;
}
}
不要尝试格式化TextChanged事件中的数字会变得混乱。然后当用户离开文本框时更改格式。
private void textBox_Leave(object sender, EventArgs e)
{
// Since you were validating the number while typing now there is no need for TryParse
decimal theNumber = decimal.Parse((sender as TextBox).Text);
(sender as TextBox).Text = string.Format("{0:N2}", theNumber);
}
注:这是简单明了的,如果你需要更多的东西阐述(最佳做法和所有的东西...)是指汉斯的答案。
我不知道这是否会帮助,但这里有云:
try
{
double number = Convert.toDouble(textBox.Text);
string[] digits = Regex.Split(textBox.Text, @"\W+");
int x = 0;
List<string> finalNumber = new List<string>();
while(x < numbers.Length)
{
if(digits[x] == ".")
break;
if(x%3 = 0 && x != 0)
{
finalNumber.Add(",");
}
finalNumber.Add(digits[x]);
x++;
}
string finalNumberJoined = "";
foreach(var digit in finalNumber)
{
finalNumberJoined = finalNumberJoined + digit;
}
}
catch
{
//not a number
}
如果这'1,00,000.00'是'100,000.00'吧? – Neolisk 2013-03-11 16:35:22