如何在文本框中只接受一个小数点?

时间:2010-12-03 08:35:35

标签: c#

文本框只接受数字,只接受一个小数点。

例如,文本框包含“12345.56”。当在键盘上再次按下句号时,它不能出现在文本框中,因为文本框已经包含句点。

6 个答案:

答案 0 :(得分:7)

[0-9]+(\.[0-9][0-9]?)?

使用正则表达式。

答案 1 :(得分:3)

hande KeyPress事件并假设其窗口

void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {

        if (e.KeyChar == '.' )
        {
            if (richTextBox1.Text.Contains('.'))
                e.Handled = true;
        }
    }

答案 2 :(得分:2)

**//Only numeric with Two decimal place comes in textbox and if user want to enter decimal again or space it will not allowed.**

 if ((e.Key >= Key.D0 && e.Key <= Key.D9 ||
                e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9 || e.Key == Key.Decimal || e.Key == Key.OemPeriod))
            {
                string strkey = e.Key.ToString().Substring(e.Key.ToString().Length - 1, e.Key.ToString().Length - (e.Key.ToString().Length - 1));

                if (e.Key >= Key.D0 && e.Key <= Key.D9 ||
                    e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
                {

                    TextBox tb = sender as TextBox;
                    int cursorPosLeft = tb.SelectionStart;
                    int cursorPosRight = tb.SelectionStart + tb.SelectionLength;
                    string result1 = tb.Text.Substring(0, cursorPosLeft) + strkey + tb.Text.Substring(cursorPosRight);
                    string[] parts = result1.Split('.');
                    if (parts.Length > 1)
                    {
                        if (parts[1].Length > 2 || parts.Length > 2)
                        {
                            e.Handled = true;
                        }
                    }
                }

                if (((TextBox)sender).Text.Contains(".") && e.Key == Key.Decimal)
                {
                    e.Handled = true;
                }
            }
            else
            {
                e.Handled = true;
            }

            if (e.Key >= Key.A && e.Key <= Key.Z ||
                    e.Key == Key.Space)
            {
                e.Handled = true;
            }

            if (Keyboard.Modifiers == ModifierKeys.Shift && e.Key == Key.OemPeriod)
            {
                e.Handled = true;
            }

答案 3 :(得分:0)

private bool isValueEnteredExceed100(string textBoxValue, string inputText)
{
    var countPeriod = textBoxValue.Count(x => x.ToString().Equals("."));
    if (countPeriod <= 1)
    {
        bool isValidNumber = AreAllValidNumericChars(inputText);

        if (isValidNumber == true || inputText == ".")
        {
            double enterdValue;
            bool returnValue = false;
            if (textBoxValue != string.Empty || textBoxValue != "")
            {
                enterdValue = Convert.ToDouble(textBoxValue);
                if (enterdValue > 0 && enterdValue <= 100)
                {
                    returnValue = true;
                }
            }
            return returnValue;
        }
        else
        {
            return isValidNumber;
        }
    }
    else
    {
        return false;
    }
}

private void AcceptedFromTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    string textBoxValue = AcceptedFromTextBox.Text + e.Text;
    if (textBoxValue == ".")
    {
        textBoxValue = "0" + e.Text;
        AcceptedFromTextBox.Text = textBoxValue;
    }
    e.Handled = !isValueEnteredExceed100(textBoxValue, e.Text);
    AcceptedFromTextBox.SelectionStart = AcceptedFromTextBox.Text.Length;
}


private bool AreAllValidNumericChars(string str)
{
    Regex regex = new Regex(@"[0-9]$");
    return regex.IsMatch(str);
}

答案 4 :(得分:0)

另一个例子,

 private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
{

    if (txtPrice.Text.Length == 0)
    {
        if (e.KeyChar == '.')
        {
            e.Handled = true;
        }
    }
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != 8 && e.KeyChar != 46)
    {
        e.Handled = true;
    }
    if (e.KeyChar == '.' && txtPrice.Text.IndexOf('.') > -1)
    {
        e.Handled = true;
    }
}

答案 5 :(得分:0)

文本框的Keypress事件代码

if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
       e.Handled = true;
}
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
       e.Handled = true;
}