2009-11-27 5 views
2

Ok, donc je suis en train de faire un jeu Tic-Tac-Toe pour m'aider à apprendre C#. J'essaie d'ajouter un peu de fonctionnalité, donc je veux que les gens puissent utiliser le pavé numérique sur un ordinateur pour simuler un clic sur les boutons.Keypress pour simuler un bouton Cliquez en C#

Voici ce que j'ai, mais lorsque j'utilise le pavé numérique, les boutons ne cliquent pas. Quelqu'un d'entre vous peut-il voir 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); 
     } 
    } 

Répondre

5

EDIT
Remarqué que je dois être plus clair sur ce que je veux dire ...

A partir du code affiché Je suppose que vous avez 9 contrôles ajoutés à vos événements-clés . Ces contrôles recevront uniquement les événements clés lorsqu'ils sont ciblés. Pour gérer les clés globalement pour le formulaire, vous devez définir Form.KeyPreview à true. De plus, je ne serais pas gérer les touches de la façon dont vous le faites, mais ajoute un événement Form.KeyDown et écrire 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 
} 

Cela se chargera de la NumPad-clés dans la forme - vous pouvez alors supprimer tous les gestionnaires d'événements vous avez posté dans votre question. Pour "cliquer" sur un bouton, vous devez utiliser la méthode Button.PerformClick(), car plus d'un gestionnaire d'événements peut être ajouté à l'événement click, qui ne serait pas appelé autrement.

EDIT 2
Syntaxe pour la switch -Déclaration était invalide. Bien sûr, chaque "cas" doit commencer par le mot-clé case ... Maintenant ça devrait marcher.

+0

Cela semble être ce que je cherche, mais je ne peux pas savoir où mettre votre code. J'ai défini KeyPreview = true; quand Form1 initialise après cela, je suis juste coincé. – Cistoran

+0

Il suffit de le définir dans les propriétés du formulaire (fenêtre Propriétés). Dans la fenêtre Propriétés, modifiez la vue dans la section events, recherchez l'événement KeyDown et double-cliquez sur cet élément. Cela ajoute un nouvel événement Form_KeyDown à votre code, où vous mettez mon code. Sinon, allez dans le code source du formulaire et tapez "override" - dans la fenêtre Code Insight, sélectionnez la méthode "OnKeyDown". Un talon est généré pour vous. Après la ligne "base.OnKeyDown", ajoutez mon code. –

+0

J'ai juste essayé et j'ai peur que ça ne marche toujours pas. Je reçois quelques erreurs à partir de quand j'ai remplacé le: avec; Les principaux étant. Aucune boucle englobante à rompre ou à continuer (celles-ci proviennent de la rupture;) Seules les expressions d'affectation, d'appel, d'incrémentation, de décrémentation et de nouvel objet peuvent être utilisées comme une instruction. (x3) (Je reçois ceci sur le clavier Keys.NumPad et sur le crochet de fermeture du commutateur – Cistoran

1

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