C# winfrom-TextBox输入框 ,小数位限制
程序员文章站
2022-06-08 17:36:00
...
winfrom-TextBox输入框 ,小数位限制
// 输入限制
private void TextBox_Double_KeyPress(object sender, KeyPressEventArgs e)
{
TextBox objControl = sender as TextBox;
if (objControl is null)
return;
if (!QZ_Tool.Utility.IsDouble(e.KeyChar, objControl))
{
e.Handled = true;
}
}
// 判断浮点型
public static bool IsDouble(char keyChar, TextBox objControl, int numDecimalDigit = 2)
{
bool bolResult = false;
string strValue = objControl.Text;
// 第一位不能输入小数点
if (strValue == "" && keyChar == '.')
return false;
if (Regex.IsMatch(keyChar.ToString(), "[0-9\b.]"))
{
// 输入小数点
if (keyChar == '.')
{
// 检测是否存在小数点,如果存在就不能输入小数点
if (!strValue.Contains('.'))
bolResult = true;
}
else if (Regex.IsMatch(keyChar.ToString(), "[0-9]"))
{
string strSelectText = objControl.SelectedText;
// 判断是否有选择字符串
if (strSelectText.Trim() != "")
{
bolResult = true;
}
// 判断是否存在小数点
else if (strValue.Contains('.'))
{
// 获取小数点位置
var numDigitIndex = strValue.IndexOf('.') + 1;
var numSelectionStart = objControl.SelectionStart;
// 判断光标在小数点后 && numDigitIndex > strValue.Length
if (numSelectionStart > numDigitIndex)
{
// 获取小数点后的小数位数
var strSmallNumber = strValue.Substring(numDigitIndex, strValue.Length - numDigitIndex);
// 判断小数位数
if (strSmallNumber.Length >= numDecimalDigit)
{
// 字符串最后一个字符替换成输入字符
objControl.Text = strValue.Substring(0, strValue.Length - 1) + keyChar.ToString();
objControl.SelectionStart = numSelectionStart;
}
else
{
bolResult = true;
}
}
else
{
bolResult = true;
}
}
else
{
bolResult = true;
}
}
else
{
bolResult = true;
}
}
return bolResult;
}