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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top