No hay sobrecarga de 'insert_method_here' coincide delegado System.EventHandler '
-
01-10-2019 - |
Pregunta
Estoy tratando de construir un programa que tiene un botón, y cada vez que se hace clic en el botón, se mueve el botón y se suma a la puntuación. Sin embargo, yo estoy tratando de desactivar la tecla Intro, o suprime el comando cuando se presiona. Aquí es lo que tengo hasta ahora
private void button1_Click(object sender, EventArgs e, KeyEventArgs k)
{
if (k.KeyCode == Keys.Enter)
{
k.SuppressKeyPress = true;
}
score = score + 10;
timesClicked++;
int rand1 = RandomNumber(1, 400);
int rand2 = RandomNumber(1, 400);
button1.Location = new Point(rand1, rand2);
toolStripScore.Text = ("Your score is " + score);
toolStripClicks.Text = ("You've clicked the button{0} times " + timesClicked);
winCheck();
}
Esto es lo que he añadido para prevenir la tecla Intro de entrar.
if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }
Sin embargo, genera el error ... "No hay sobrecarga de 'Button1_Click' coincide delegado System.EventHandler '" Y cuando se hace clic para mostrar la ubicación, se abre el código de Form1.Designer y puntos a esta esta línea. "This.button1.Click + = new System.EventHandler (this.button1_Click);"
Cualquier ayuda en la resolución de este problema sería muy apreciada.
Solución
Su firma método no coincide delegado EventHandler
(es decir, no se puede simplemente añadir argumento KeyEventArgs
y obtener de este trabajo). Tendrá que manejar más de un evento para hacer lo que quiere (ver eventos KeyDown
o KeyPress
).
Alternativamente, evento uso MouseClick
en lugar de evento Click
.
Otros consejos
Bueno, creo que el problema está en su decleration de button1_click()
.
Un controlador de eventos sólo puede tener la firma
delegate void EventHandler(Object sender, EventArgs e)
Por lo tanto, tomar la prensa llave de button1_click
, y lo puso en un evento KeyPress
.
EventHandle delegado, es de dos parámetros, no tres. y su método tiene tres parámetros, por lo que es incorrecto.
véase: manejador de sucesos información delegado en MSDN
En primer lugar, el que tenga que modificar su método:
private void button1_Click(object sender, EventArgs e)
{
}
y luego juzgar el tipo en el método como este:
KeyEventArgs k = null;
if(e is KeyEventArgs){
k = (KeyEventArgs) e;
//do sth here about pressing 'enter'
}
delegado, el método debe tener los mismos parámetros, el mismo tipo de retorno, o será una excepción.
He tenido un problema similar. El delegado manejador de sucesos es una plantilla.
delegado public void manejador de sucesos (object sender, TEventArgs e);
Así que si cambia la línea:
this.button1.Click + = new System.EventHandler (this.button1_Click);
a:
this.button1.Click + = new System.EventHandler (this.button1_Click);
debería funcionar.