仅允许输入数字但不接受退格键的文本框掩码化

3

我有一个文本框,希望只能输入数字。但如果我输入错误的数字,我无法使用退格键进行更正。如何允许使用退格键进行更正?谢谢。

    private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (Char.IsNumber(e.KeyChar) != true)
        {
            e.Handled = true;
        }
    }

2
你能不能不使用掩码文本框? - shahkalpesh
9个回答

3
你可以添加一个检查,允许控制字符的存在:
if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) != true)
{
    e.Handled = true;
}

更新:针对b用户在评论中提供的代码建议,以下是我个人也会这样写的样式:
if (!Char.IsControl(e.KeyChar) && !Char.IsNumber(e.KeyChar))
{
    e.Handled = true;
}

1
你能否使用!Char.IsControl(e.KeyChar)和!Char.IsNumber(e.KeyyChar)代替!= true吗? - Lucas Jones
@person-b:这就是我个人的写法,但我选择让我的代码遵循JimDel的约定,专注于功能而不是编码风格。 - Fredrik Mörk
我认为在这种情况下不允许控制字符。例如,制表符是控制字符,但据我理解,作者只需要数字。 - arbiter
谢谢Fredrik。我本来以为我试过了,但是没有成功。我复制了你的代码并添加了“&& Char.IsPunctuation(e.KeyChar) != true”,这样它也可以接受小数点。这很好用。再次感谢。但是!Char是什么意思?它只是缩短语句吗? - JimDel
!Char.IsNnn 中的 ! 字符是一个逻辑否定运算符(基本上意味着“不”);写 !expression 比写 expression != true 或 expression == false 更短。阅读更多:http://msdn.microsoft.com/en-us/library/f2kd6eb2(VS.80).aspx - Fredrik Mörk
显示剩余3条评论

3

正确答案是:

private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !сhar.IsNumber(e.KeyChar) && (e.KeyChar != '\b');
}

1

你也可以覆盖TextChanged事件:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    string text = (sender as TextBox).Text;

    StringBuilder builder = new StringBuilder(String.Empty);

    foreach (char character in text)
    {
        if (Char.IsDigit(character))
        {
            builder.Append(character);
        }
    }

    (sender as TextBox).Text = builder.ToString();
}

请注意,您需要添加代码来设置插入符号位置。

0
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
     if (!Char.IsNumber(e.KeyChar) && e.KeyCode != Keys.Back)
          e.Handled = True;
}

KeyPressEventArgs类不包含KeyCode属性。 - arbiter
哦,我的错误,我是凭记忆写的,把它放在了你的方法签名中。使用KeyDown或Up,而不是Press,因为e.KeyChar无法访问Delete。 - colithium

0
上面的内容稍微整洁一些:
 private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
 {
   e.Handled = !(Char.IsNumber(e.KeyChar) || (e.KeyChar==Keys.Back));
 }

这段代码无法编译(KeyPressEventArgs没有KeyCode属性)。 - Fredrik Mörk

0
您可以在按键事件中使用以下内容:
      private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!Char.IsDigit(e.KeyChar) & (e.KeyChar != 8)) e.Handled = true; 
    }

0
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
    {
        // Allow Digits and BackSpace char
    }        
    else
    {
        e.Handled = true;
    }
}

参考链接:文本框掩码只接受小数 小数/12209854#12209854


0

-1

点击您的文本框,然后输入事件 从事件中双击KeyPress 然后编写此代码

if( e.KeyChar <'0' || e.KeyChar > '9' )
if(e.KeyChar!=08)
e.Handled=true;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接