如何以更好的方式使用KeyDown事件验证?

时间:2012-01-18 04:16:50

标签: c# forms events textbox refactoring

我有几个TextBox,只需要允许数字输入。问题是我必须复制&将下面的代码粘贴到另一个只允许数值的TextBox。有没有更简单的方法来实现?比如使用函数还是继承?

private void txtCheckVoucher_Amount_KeyDown(object sender, KeyEventArgs e)
{
     if (Control.ModifierKeys == Keys.Shift)
     {
           e.SuppressKeyPress = true;
           return;
     }

     if (((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
             (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
              e.KeyCode == Keys.Decimal || e.KeyCode == Keys.OemPeriod ||
              e.KeyCode == Keys.Back || e.KeyCode == Keys.Tab ||
              e.KeyCode == Keys.Left || e.KeyCode == Keys.Right ||
              e.KeyCode == Keys.End || e.KeyCode == Keys.Home ||
              e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Delete))
     {

     }
     else if (e.KeyCode >= Keys.A || e.KeyCode <= Keys.Z)
              e.SuppressKeyPress = true;
}

4 个答案:

答案 0 :(得分:3)

你可以用三种方式做到这一点

  1. 您可以使用通用功能检查输入的密钥是否有效。然后从所有按键事件处理程序调用该函数。如果您有不同表格的文本框,这是合适的。
  2. 如果所有文本框都在同一个表单上,那么将所有按键事件处理程序绑定到同一个函数。
  3. 您可以拥有自定义文本框控件,该控件只接受所需的键。查看this帖子,它可能对您有帮助。
  4. 通常,您可以按((System.Windows.Forms.Control)(sender)).Name

    检索文本框控件ID /名称

    希望这有帮助。

答案 1 :(得分:1)

如果文本框需要相同的KeyDown事件逻辑,为什么不将两个文本框同时订阅到同一个事件处理程序?

您可以将KeyDown事件设置为相同的txtCheckVoucher_Amount_KeyDown()方法。

答案 2 :(得分:1)

您可以从所有其他文本框的KeyDown事件中调用txtCheckVoucher_Amount_KeyDown()。

答案 3 :(得分:0)

简单地将相同的KeyDown事件txtCheckVoucher_Amount_KeyDown()分配给所有文本框