C# CS0123-对'无过载;文本已更改';匹配委托';EventHandler';
充分披露是的,这是家庭作业,是的,我试着研究我的问题,但仍然不知道如何解决它 所以我试着只允许在文本框中输入数字。我是使用KeyPressEventArgs参数实现的C# CS0123-对'无过载;文本已更改';匹配委托';EventHandler';,c#,winforms,C#,Winforms,充分披露是的,这是家庭作业,是的,我试着研究我的问题,但仍然不知道如何解决它 所以我试着只允许在文本框中输入数字。我是使用KeyPressEventArgs参数实现的 private void classAinput_TextChanged(object sender, KeyPressEventArgs e) { if (!char.IsDigit(e.KeyChar)) e.Handled = true; else { invalidF
private void classAinput_TextChanged(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar))
e.Handled = true;
else
{
invalidFormatError();
}
e.Handled = true;
}
这对我来说已经足够好了,但是我得到了一个CS0123错误,它说:
“classAinput\u TextChanged”匹配委托时没有重载
“事件处理程序”
设计器代码的内部
为什么会这样
//
// classAinput
//
this.classAinput.Location = new System.Drawing.Point(67, 51);
this.classAinput.Name = "classAinput";
this.classAinput.Size = new System.Drawing.Size(100, 20);
this.classAinput.TabIndex = 4;
this.classAinput.TextChanged += new System.EventHandler(this.classAinput_TextChanged);
//
完整表单1代码:您的问题是,您当前提供的
TextChanged
方法不正确。TextChanged
Event requiresobject
和EventArgs
类型作为参数。由于您的目标是捕获按键事件,请删除当前方法,并将其添加到表单中:
private void classAinput_KeyPressed(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar))
e.Handled = true;
else
{
invalidFormatError();
}
e.Handled = true;
}
在你的设计师身上,应该是:
this.classAinput.KeyPressed += new System.EventHandler(this.classAinput_KeyPressed);
TextChanged
事件不接受KeyPressEventArgs
。是的,因此,请订阅以下内容:
this.classAinput.KeyPress += new System.KeyPressEventHandler(this.classAinput_TextChanged);
或者,您可以使用TextChanged
事件尝试int.TryParse
。实现可以是这样的:
private void classAinput_TextChanged(object sender, EventArgs e)
{
if (!(classAinput.Text == "" || int.TryParse(classAinput.Text, out int _))) {
invalidFormatError();
}
}
事件处理程序需要
(对象发送方,EventArgs e)
参数。如果出于任何原因需要处理,则应附加具有(对象发送方,按键EventArgs e)的事件处理程序
KeyPressevent的参数。@RezaAghaei如何将事件处理程序附加到KeyPress事件?请看这行代码:this.classAinput.TextChanged+=new System.EventHandler(this.classAinput\u TextChanged)代码>由设计器生成。如果转到设计器并在属性窗口中的事件中选择classAinput
文本框,您可以看到classAinput\u TextChanged
方法被分配给TextChanged
。剪切该名称并将其粘贴到KeyPress
事件前面。修复处理程序后。。。第二次设置e.Handled=true
似乎是错误的。它将标记处理的每个键,除非invalidFormatError
抛出异常(在这种情况下,这将是错误的)。还有,如果我想打退格怎么办?我不能。