-1

我有一个获取十进制值的文本框说10500.00问题是我拥有它的方式,当您输入一个值然后输入小数时,它不允许您退格或清除文本框以输入新值..它只是卡住了.. 我试图将值设置回 0.00,但我认为我把它放在了错误的地方,因为它不会改变它。这是我的代码

 private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e)
        {
            bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d");
            if (matchString)
            {
                e.Handled = true;
            }

            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
            {
                e.Handled = true;
            }

            // only allow one decimal point
            if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
        }

您建议进行什么类型的更改,以便我可以退格或清除 texbox 并输入新值?

4

2 回答 2

1

最简单的方法是:

if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '\b')
{
    e.Handled = true;
}
于 2012-04-06T05:36:43.603 回答
1

您可以捕获 Backspace (BS) 字符 (8),如果找到,请将句柄设置为 false。

您的代码可能如下所示...

....
// only allow one decimal point
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
    e.Handled = true;
}

if (e.KeyChar == (char)8)
    e.Handled = false;

建议让您的代码更直观地解释您的事件处理程序正在做什么,您可能希望创建一个 var 来暗示您正在实现的逻辑。就像是...

private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e)
{
    bool ignoreKeyPress = false; 

    bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d");

    if (e.KeyChar == '\b') // Always allow a Backspace
        ignoreKeyPress = false;
    else if (matchString)
        ignoreKeyPress = true;
    else if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        ignoreKeyPress = true;
    else if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
        ignoreKeyPress = true;            

    e.Handled = ignoreKeyPress;
}
于 2012-04-06T05:42:05.077 回答