Keypress警告 - 如果要隐藏,请使用new关键字

时间:2014-01-20 21:27:07

标签: c# winforms events

我一直在void KeyPress(object sender, KeyPressEventArgs e)收到以下错误消息:

  

警告'SpeedyRent.Form2.KeyPress(对象,   System.Windows.Forms.KeyPressEventArgs)'隐藏继承的成员   'System.Windows.Forms.Control.KeyPress'。如果隐藏,请使用new关键字   是有意的。

到目前为止,这是我的代码:

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

以下3个参考文献:

this.totalTxt.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.KeyPress);
this.remainTxt.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.KeyPress);
this.paidTxt.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.KeyPress);

造成这种情况的原因是什么?

3 个答案:

答案 0 :(得分:4)

您的方法名为KeyPress,但已经存在一个名为KeyPress的事件,该事件来自Control。尝试使用不会与任何继承成员冲突的名称,如下所示:

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

另请注意,您可以绑定以下事件:

this.totalTxt.KeyPress += this.TextBox_KeyPress;
this.remainTxt.KeyPress += this.TextBox_KeyPress;
this.paidTxt.KeyPress += this.TextBox_KeyPress;

答案 1 :(得分:2)

  

造成这种情况的原因是什么?

您声明的方法与基类中声明的事件同名。 隐藏派生类中的事件,这一般不是一个好主意。

两个选项:

  • 使用new作为编译器建议
  • 只需重命名方法

我个人会采用后一种方法,给这个方法一个名字,它实际上说明了它的作用:

private void SuppressNonDigits(object sender, KeyPressEventArgs e)
{
    ...
}

您还可以使用方法组转换使用比以前更简洁的语法进行订阅:

totalTxt.KeyPress += SuppressNonDigits;
remainTxt.KeyPress += SuppressNonDigits;
paidTxt.KeyPress += SuppressNonDigits;

答案 2 :(得分:1)

从具有非KeyPress virtual方法的类继承此方法(KeyPress)后,您使用的是哪种类。