在KeyPress事件期间限制文本框输入

时间:2014-11-26 14:10:58

标签: c# winforms

我有以下代码:

private void txtNR_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
    {
        e.Handled = true;
    }
    else 
    {
    }

    // only allow one decimal point
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
    {
        e.Handled = true;
    }
    else
    {
        MessageBox.Show("You cannot type letters!"); 
    }
}

我的问题是:当我尝试输入字母时,警告信息即将出现,但是当我尝试输入数字时也会发生同样的情况,并且在我点击确定消息后,该号码将被写下来内。你能帮我理解为什么吗?

5 个答案:

答案 0 :(得分:0)

替换

else { }

else

由于额外{},即使处理了第一个if语句,也会执行第二个if语句。因此,即使字符是数字(已经处理过),您也会看到消息框

答案 1 :(得分:0)

你的病情没问题。你只需要将Char设置为空

试试这个:

 // only allow one decimal point
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
    e.Handled = true;
}
else
{
    MessageBox.Show("You cannot type letters!"); 
    e.KeyChar = '\0';
}

答案 2 :(得分:0)

我建议你在用户输入后验证文本框的内容。就像@Sinatr所说的那样,对于用户来说,每次写错输入时都会显示一个消息框,这可能会很烦人。

我认为它也应该简化你的代码。

如果文本不是数字,则显示消息框,类似于此。

textbox_Validating(){
decimal d;
if(decimal.TryParse(textBox1.Text, out d))
{
    //valid 
}
else
{
    //invalid
    MessageBox.Show("Please enter a valid number");
    return;
}
}

类似的东西...抱歉代码中的最终错误。 祝你好运。

答案 3 :(得分:0)

你没有说出你的总体目标是什么。

但是要正确处理事件,您将在此之后工作。你并不总是想要一个弹出消息,更好地验证表单提交。

您是否尝试制作小数文本框?

您还必须考虑复制和粘贴这些事件不会涵盖的内容。

 if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
 {
    e.Handled = true;
 }
 else
 {   // only allow one decimal point
    if ((e.KeyChar == '.'))
    {
        if (((TextBox) sender).Text.Contains("."))
        {
            e.Handled = true;
        }
    }
    else
    {
        if (char.IsControl(e.KeyChar))
        {
            return;
        }

        if (!char.IsDigit(e.KeyChar))
        {
            MessageBox.Show("You cannot type letters!");
        }
    }
 }

答案 4 :(得分:0)

您的代码应该是这样的:

if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar) || (e.KeyChar == '.')))
{
    e.Handled = true;
    MessageBox.Show("You cannot type letters!");
}