限定文本输入为金额(money)类型

来源:互联网 发布:mysql 当前unix时间戳 编辑:程序博客网 时间:2024/05/08 05:37

写了一小段程序,用来控制textbox的输入数据为money类型,也就是123.45的格式.不过还不是太完善,拿出来共同研究吧.
不说废话了,贴代码
...
this.textbox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textbox1_KeyPress);
...
private void textbox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{   
 if ((e.KeyChar< 48 || e.KeyChar > 57) && e.KeyChar!=8 && e.KeyChar!=32 && e.KeyChar!=46)
 {
  e.Handled = true;
 }
 else if(e.KeyChar==46 && textbox1.Text.IndexOf(".")>=0 )
 {
  e.Handled = true;
 }
 else if(textbox1.Text.IndexOf(".")>=0 && textbox1.Text.Length-textbox1.Text.IndexOf(".")>2)
 {
  e.Handled = true;
 }
 if (e.KeyChar==13)
 {    
  try
  {     
   decimal d =decimal.Parse(textbox1.Text);
   if(double.Parse(d.ToString())<0.02)
   {
    System.Windows.Forms.MessageBox.Show("金额太小","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    return;
   }
   //#.##不足位数的用0补位
   string s=d.ToString("#,##0.00");     
   textbox1.Text=s; 
   System.Windows.Forms.SendKeys.Send("/t");
  }
  catch(System.Exception ex){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)用户输入回车提交以后
先判断了一次输入金额的大小
decimal d =decimal.Parse(textbox1.Text);
if(double.Parse(d.ToString())<0.02)
然后回显到textbox上
string s=d.ToString("#,##0.00");     
textbox1.Text=s;


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