“...”没有重载匹配委托'EventHandler'?

时间:2018-03-17 06:06:23

标签: c# winforms syntax-error

以下是一段代码,因此文本框(“TxtInput1”)中只有一个小数,只有一个数字:

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

    // only allow one decimal point
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
    {
        e.Handled = true;
    }
}

但它给了我以下错误:

  

CS0123“TxtInput1_TextChanged”的超载与委托匹配   '事件处理'

我点击了错误并弹出了这个:

form1.TxtInput1.Location = new System.Drawing.Point(92, 111);
form1.TxtInput1.Name = "TxtInput1";
form1.TxtInput1.Size = new System.Drawing.Size(43, 20);
form1.TxtInput1.TabIndex = 8;
form1.TxtInput1.TextChanged += new System.EventHandler(form1.TxtInput1_TextChanged);

System.EventHandler(form1.TxtInput1_TextChanged);行标有红色,表示错误。对此问题有任何解决方法吗?

2 个答案:

答案 0 :(得分:2)

您的方法的签名与处理TextChanged事件所需的签名不匹配。 TextChanged事件的第二个参数只是:startGame cls echo New Game / Load Game echo. echo Create New : (N) echo Load Save : (L) echo. set /p NL= if %NL% == n goto newGame if %NL% == l goto loadGame goto startGame :loadGame cls echo Enter the name of your saved file. echo. set/p ldName=Enter: ( set /p name= %name% set /p exp= %exp% set /p money= %money% set /p deaths= %deaths% set /p lvl= %lvl% set /p hp= %hp% set /p pwr= %pwr% ) < %ldName%.sav goto advent2 :advent2 cls echo Name: %name% echo Experience Points: %exp% echo Gold: %money% echo Total Deaths: %deaths% echo Current Level: %lvl% echo Total Health Points: %hp% echo Power Level: %pwr% echo. pause goto advent3_1 。但是如果你把它改成那样,你的方法的内容就不会编译了。

从方法的签名看,您需要将其挂钩到KeyPress事件。

答案 1 :(得分:1)

将您的处理程序TxtInput1_TextChanged订阅到KeyPress TxtInput1的事件,而不是TextChanged。错误是由于代表签名不匹配造成的。

更改为:

form1.TxtInput1.KeyPress+= new System.KeyPressEventHandler(form1.TxtInput1_TextChanged);