Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CS0123-对'无过载;文本已更改';匹配委托';EventHandler';_C#_Winforms - Fatal编程技术网

C# CS0123-对'无过载;文本已更改';匹配委托';EventHandler';

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

充分披露是的,这是家庭作业,是的,我试着研究我的问题,但仍然不知道如何解决它

所以我试着只允许在文本框中输入数字。我是使用KeyPressEventArgs参数实现的

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 requires
object
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
抛出异常(在这种情况下,这将是错误的)。还有,如果我想打退格怎么办?我不能。