Question

Ok, je suis donc en train de créer un jeu de Tic-Tac-Toe pour m'aider à apprendre le C #. J'essaie d'y ajouter un peu de fonctionnalité, je souhaite donc que les utilisateurs puissent utiliser NumPad sur un ordinateur pour simuler un clic sur les boutons.

Voici ce que j'ai, mais lorsque j'utilise le pavé numérique, les boutons ne cliquent pas. L’un d’entre vous peut-il comprendre pourquoi?

    //===============================
    // 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);
        }
    }
Était-ce utile?

La solution

MODIFIER
Remarquez que je dois être plus clair sur ce que je veux dire ...

D'après le code que vous avez posté, je soupçonne que vous avez 9 contrôles auxquels vous avez ajouté vos événements clés. Ces commandes ne recevront d’événements clés que si elles sont ciblées.

Pour gérer les clés globalement pour le formulaire, vous devez définir Form.KeyPreview sur true . De plus, je ne manipulerais pas les clés comme vous le faites, mais ajouteriez un événement Form.KeyDown et écrivez quelque chose comme:

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

Ceci gérera les touches NumPad dans le formulaire. Vous pourrez alors supprimer tous les gestionnaires d'événements que vous avez publiés dans votre question.

Pour programmer, cliquez sur " Pour utiliser un bouton, vous devez utiliser la méthode Button.PerformClick () , car plusieurs gestionnaires d’événements peuvent être ajoutés à l’événement click, qui ne serait pas appelé autrement.

EDIT 2
La syntaxe de l'instruction switch n'était pas valide. Bien sûr, chaque " affaire " doit commencer par le mot clé case ... Cela devrait maintenant fonctionner.

Autres conseils

Vous devez utiliser button1.PerformClick (); pour que chaque bouton appelle l'événement correctement, voici info .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top