使用KeyPressValidate事件时程序冻结

时间:2014-02-03 11:57:28

标签: c# winforms visual-studio-2012

我使用以下代码来阻止用户在仅限数字的文本字段中输入字母字符。

empIDTextBox.KeyPress -= new KeyPressEventHandler(KeyPressValidate);
empIDTextBox.KeyPress += new KeyPressEventHandler(KeyPressValidate); 

private void KeyPressValidate(object sender, KeyPressEventArgs e)
{
            try
            {
                if (!char.IsControl(e.KeyChar) && !char.IsNumber(e.KeyChar) && e.KeyChar != '.')
                {
                    e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
}

我遇到的问题是,当我运行程序进行测试时,我点击empIDTextBox首次输入值,验证工作正常。当我从这个文本框中点击一下然后再点击回empIDTextBox编辑输入的值时,我无法点击表单上的任何其他位置,就像整个程序冻结而光标卡在empIDTextBox空间。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您希望用户仅输入数值,我建议您使用 NumericUpDown 控件。

如果由于某种原因无法使用该控件,那么我所做的就是为您的文本框制作单独的事件并在我的系统中使用您的代码,一切正常。

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