我在C#Windows应用程序中的自定义用户控件中尝试了此代码:
public partial class HtextBox : DevExpress.XtraEditors.TextEdit
{
protected override void OnTextChanged(KeyEventArgs kpe)
{
if (kpe.KeyCode == Keys.D1 ||
kpe.KeyCode == Keys.D2 ||
kpe.KeyCode == Keys.D3 ||
kpe.KeyCode == Keys.D4 ||
kpe.KeyCode == Keys.D5 ||
kpe.KeyCode == Keys.D6 ||
kpe.KeyCode == Keys.D7 ||
kpe.KeyCode == Keys.D8 ||
kpe.KeyCode == Keys.D9 ||
kpe.KeyCode == Keys.D0
) {
base.Text += kpe.KeyValue;
}
}
}
我收到了这个错误:
错误1'myproject.HtextBox.OnTextChanged(object,System.Windows.Forms.KeyEventArgs)':找不到合适的方法来覆盖E:\ my project \ myproject \ HtextBox.cs
我想创建一个自定义文本框。在这里,我希望这个文本框只是为了输入数字。一个例子是什么?
答案 0 :(得分:2)
即使KeyEventArgs
是System.EventArgs
的子类,C#也不允许您使用子类参数覆盖方法。您需要使用signature from the base class覆盖该方法,然后转换为函数内的KeyEventArgs
:
protected override void OnTextChanged(System.EventArgs args) {
KeyEventArgs kpe = (KeyEventArgs)args;
...
}
修改强>
由于OnTextChanged
未提供KeyEventArgs
,看起来您需要它们,请尝试覆盖其他方法:
protected override void OnKeyDown(KeyEventArgs kpe) {
...
}
答案 1 :(得分:0)
@dasblinkenlight已经正确回答了你的问题。
但是,方法Form.OnTextChanged
是一种事件提升方法,几乎不应该被覆盖。您可能希望在派生类构造函数中创建一个事件处理程序:
this.TextChanged += new EventHandler(OnTextChanged);
BTW,在Visual Studio中,键入+=
后按Tab键将为您生成事件处理程序。
答案 2 :(得分:0)
您似乎忘记了事件处理程序中的第一个参数。
将其更改为:
protected override void OnTextChanged(Object sender, KeyEventArgs kpe)
{
if (kpe.KeyCode == Keys.D1 ||
kpe.KeyCode == Keys.D2 ||
kpe.KeyCode == Keys.D3 ||
kpe.KeyCode == Keys.D4 ||
kpe.KeyCode == Keys.D5 ||
kpe.KeyCode == Keys.D6 ||
kpe.KeyCode == Keys.D7 ||
kpe.KeyCode == Keys.D8 ||
kpe.KeyCode == Keys.D9 ||
kpe.KeyCode == Keys.D0
) {
base.Text += kpe.KeyValue;
}
}