1. 程式人生 > 實用技巧 >C# winfrom-TextBox輸入框 ,小數位限制

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;
//}