C# winfrom-TextBox输入框 ,小数位限制


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]") && Regex.IsMatch(strValue, "[0-9].[\\d]+[\\d]+[\\d]"))
                //{
                //    bolResult = false;
                //}
                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;
        }


//// 判断浮点型
//public static bool IsDouble(char keyChar, string strValue)
//{
// bool bolResult = false;

// // 第一位不能输入小数点
// 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]") && Regex.IsMatch(strValue, "[0-9].[\\d]+[\\d]+[\\d]"))
// {
// bolResult = false;
// }
// else
// bolResult = true;
// }

// return bolResult;
//}

C