前言 |
经过了十二天的奋战第三次机房合作终于做完了,虽然做完了,但是还需要优化,在对文本限制的时候,想到了一个问题,关于金额的文本框该怎么限制呢?
怎么限制呢 |
前两次做机房的时候,没有考虑这么多,只是把文本框限制成只允许输入数字,因为我们刚开始写文档的时候,把关于金额的数据类型都设置成了decimal(6,2)有效长度为六位,小数点后两位,所以就要考虑小数点的问题了,首先小数点不能在第一位,然后小数点只允许输入一次,还有小数点后输入两位,第一位是零的时候,第二位必须是小数点。
if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != (char)('.') && e.KeyChar != (char)('-'))
{
e.Handled = true;
}
if (e.KeyChar == (char)('-'))
{
if ((sender as TextBox).Text != "")
{
e.Handled = true;
}
}
//第1位小数点不可
if (e.KeyChar == (char)('.') && ((TextBox)sender).Text == "")
{
e.Handled = true;
}
//小数点只能1次
if (e.KeyChar == (char)('.') && ((TextBox)sender).Text.IndexOf('.') != -1)
{
e.Handled = true;
}
//小数点(最大到2位)
if (e.KeyChar != '\b' && (((TextBox)sender).SelectionStart) > (((TextBox)sender).Text.LastIndexOf('.')) + 2 && ((TextBox)sender).Text.IndexOf(".") >= 0)
e.Handled = true;
//光标在小数点右侧时候判断
if (e.KeyChar != '\b' && ((TextBox)sender).SelectionStart >= (((TextBox)sender).Text.LastIndexOf('.')) && ((TextBox)sender).Text.IndexOf(".") >= 0)
{
if ((((TextBox)sender).SelectionStart) == (((TextBox)sender).Text.LastIndexOf('.')) + 1)
{
if ((((TextBox)sender).Text.Length).ToString() == (((TextBox)sender).Text.IndexOf(".") + 3).ToString())
e.Handled = true;
}
if ((((TextBox)sender).SelectionStart) == (((TextBox)sender).Text.LastIndexOf('.')) + 2)
{
if ((((TextBox)sender).Text.Length - 3).ToString() == ((TextBox)sender).Text.IndexOf(".").ToString()) e.Handled = true;
}
}
//第1位是0,第2位必须是小数点
if (e.KeyChar != (char)('.') && e.KeyChar != 8 && ((TextBox)sender).Text == "0")
{
e.Handled = true;
}
当然了,如果金额的数据类型不考虑小数点的情况,就不用想这么多了。