Pregunta

Ok, entonces estoy en el proceso de hacer un juego de Tic-Tac-Toe para ayudarme a aprender C #. Estoy intentando agregarle un poco de funcionalidad, así que quiero que la gente pueda usar el teclado numérico en una computadora para simular hacer clic en los botones.

Esto es lo que tengo pero cuando uso el teclado numérico, los botones no hacen clic. ¿Puede alguno de ustedes ver una razón de por qué?

    //===============================
    // start NumPad Simulate Clicks
    //   NumPad  MyButtons
    //   7 8 9   1 2 3
    //   4 5 6   4 5 6 
    //   1 2 3   7 8 9
    //===============================
    public void myControl_NumPad7(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad7)
        {
            button1_Click(null, null);
        }
    }
    public void myControl_NumPad8(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad8)
        {
            button2_Click(null, null);
        }
    }
    public void myControl_NumPad9(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad9)
        {
            button3_Click(null, null);
        }
    }
    public void myControl_NumPad4(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad4)
        {
            button4_Click(null, null);
        }
    }
    public void myControl_NumPad5(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad5)
        {
            button5_Click(null, null);
        }
    }
    public void myControl_NumPad6(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad6)
        {
            button6_Click(null, null);
        }
    }
    public void myControl_NumPad1(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad1)
        {
            button7_Click(null, null);
        }
    }
    public void myControl_NumPad2(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad2)
        {
            button8_Click(null, null);
        }
    }
    public void myControl_NumPad3(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad3)
        {
            button9_Click(null, null);
        }
    }
¿Fue útil?

Solución

EDIT
Noté que tengo que aclarar lo que quiero decir ...

Desde el código que publicaste, sospecho que tienes 9 controles a los que agregaste tus eventos clave. Estos controles solo recibirán eventos clave cuando estén enfocados.

Para manejar las teclas globalmente para el formulario, debe establecer Form.KeyPreview en true . Además, no manejaría las claves de la forma en que lo haces, pero agrego un evento Form.KeyDown y escribo algo como:

switch (e.KeyCode)
{
    case Keys.NumPad9:
        e.Handled = true;
        button3.PerformClick();
        break;
    case Keys.NumPad8:
        e.Handled = true;
        button2.PerformClick();
        break;
    // And so on
}

Esto manejará las teclas NumPad dentro del formulario; luego, puedes eliminar todos los controladores de eventos que hayas publicado en tu pregunta.

Para programar " haga clic en " un botón, debe usar el método Button.PerformClick () , ya que se puede agregar más de un controlador de eventos al evento click, que no se llamaría de otra manera.

EDIT 2
La sintaxis del switch -statement no fue válida. Por supuesto, cada " caso " debe comenzar con la palabra clave caso ... Ahora debería funcionar.

Otros consejos

Debe usar el botón 1.PerformClick (); para que cada botón invoque el evento correctamente, aquí hay info .

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