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