日期:2014-05-19  浏览次数:20956 次

如何判断textBox里输入的是金额
我在textBox里要输入金额,格式是xx.xx,小数点后必须有两位,如果用户输入的不是数字,便不能显示,如果用户输入的是xx,则自动变成xx.00,如果用户输入的是xx.x则自动变马xx.x0
请指点下,谢谢了

------解决方案--------------------
轉帖:
限定文本输入为金额(money)类型
写了一小段程序,用来控制textbox的输入数据为money类型,也就是123.45的格式.不过还不是太完善,拿出来共同研究吧.
不说废话了,贴代码

...

this.textbox1.KeyPress+=newSystem.Windows.Forms.KeyPressEventHandler(this.textbox1_KeyPress);

...

privatevoidtextbox1_KeyPress(objectsender,System.Windows.Forms.KeyPressEventArgse)

{

if((e.KeyChar <48

e.KeyChar> 57)&&e.KeyChar!=8&&e.KeyChar!=32&&e.KeyChar!=46)

{

e.Handled=true;

}

elseif(e.KeyChar==46&&textbox1.Text.IndexOf( ". ")> =0)

{

e.Handled=true;

}

elseif(textbox1.Text.IndexOf( ". ")> =0&&textbox1.Text.Length-textbox1.Text.IndexOf( ". ")> 2)

{

e.Handled=true;

}

if(e.KeyChar==13)

{

try

{

decimald=decimal.Parse(textbox1.Text);

if(double.Parse(d.ToString()) <0.02)

{

System.Windows.Forms.MessageBox.Show( "金额太小 ", "警告 ",MessageBoxButtons.OK,MessageBoxIcon.Warning);

return;

}

//#.##不足位数的用0补位

strings=d.ToString( "#,##0.00 ");

textbox1.Text=s;

System.Windows.Forms.SendKeys.Send( "\t ");

}

catch(System.Exceptionex){MessageBox.Show(ex.Message);}

}

}

其中

if(e.KeyChar==46&&textbox1.Text.IndexOf( ". ")> =0)

{

e.Handled=true;

}

用于判断用户输入两次以上的 ". "的情况,

if(textbox1.Text.IndexOf( ". ")> =0&&textbox1.Text.Length-textbox1.Text.IndexOf( ". ")> 2)

{

e.Handled=true;

}

用于当用户输入到分以后禁止继续输入的情况

在if(e.KeyChar==13)用户输入回车提交以后

先判断了一次输入金额的大小

decimald=decimal.Parse(textbox1.Text);

if(double.Parse(d.ToString()) <0.02)

然后回显到textbox上

strings=d.ToString( "#,##0.00 ");

textbox1.Text=s;

这些判断里,对小数点的判断写的不是太好.当用户输入到分的时候,连删除按钮也不能用了.不知哪位看到这段代码来完善一下,呵呵~~

------解决方案--------------------
因为
elseif(textbox1.Text.IndexOf( ". ")> =0&&textbox1.Text.Length-textbox1.Text.IndexOf( ". ")> 2)
{
e.Handled=true;
}

把这一判断删去,将格式的整理放到验证(Validate)事件中去处理
------解决方案--------------------
private void textBox1_KeyPress (object sender, KeyPressEventArgs e)
{
if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != 46)
{
e.Handled = true;
}
else if (e.KeyChar == 46 && textBox1.Text.IndexOf( ". ") > = 0)
{
e.Handled = true;
}
else if (e.KeyChar==13)
{
textBox1_Validating(sender, new CancelEventArgs());
}
}

private void textBox1_Validating (object sender, CancelEventArgs e)
{
if (textBox1.Text.IndexOf( ". ") == -1)
{
textBox1.Text = textBox1.Text + ".00 ";