我一直在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);
造成这种情况的原因是什么?
答案 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
)后,您使用的是哪种类。