Question

Je suis en train de construire un programme qui a un bouton, et chaque fois que le bouton est cliqué, il déplace le bouton et ajoute au score. Cependant, je suis en train de désactiver la touche Entrée, ou supprimer la commande lorsqu'il est pressé. Voici ce que j'ai jusqu'à présent

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();
    }

est ce que j'ajouté pour empêcher la touche entrée d'entrer.

if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }

Cependant, il génère l'erreur ... « Pas de surcharge pour « button1_Click » correspond délégué « System.EventHandler » » Et quand on clique dessus pour indiquer l'emplacement, il ouvre le code pour Form1.Designer et des points à cette cette ligne. "This.button1.Click + = new System.EventHandler (this.button1_Click);"

Toute aide à résoudre ce problème serait très apprécié.

Était-ce utile?

La solution

Votre signature de la méthode ne correspond pas délégué EventHandler (qui est, vous ne pouvez pas ajouter simplement argument KeyEventArgs et obtenir ce travail). Vous devrez gérer plus d'un événement pour faire ce que vous voulez (regardez les événements KeyDown ou KeyPress).

Vous pouvez également utiliser l'événement de MouseClick au lieu d'événement Click.

Autres conseils

Eh bien, je pense que la question est dans votre decleration de button1_click().

Un gestionnaire d'événements ne peut avoir la signature

delegate void EventHandler(Object sender, EventArgs e)

Alors, prenez la presse masquez de button1_click, et le mettre dans un événement KeyPress.

délégué EventHandle, est deux paramètres, pas trois. et votre méthode a trois paramètres, il est donc faux.

voir: EventHandler informations délégué à msdn

Tout d'abord, votre devoir modifier votre méthode:

private void button1_Click(object sender, EventArgs e)
{
}

puis juger le type dans la méthode comme ceci:

KeyEventArgs k = null;
if(e is KeyEventArgs){
    k = (KeyEventArgs) e;
    //do sth here about pressing 'enter'
}

délégué, la méthode doit avoir les mêmes paramètres, le même type de retour, ou il sera exception.

J'ai eu un problème similaire. Le délégué EventHandler est un modèle.

Délégué public EventHandler void (object sender, TEventArgs e);

Donc, si vous modifiez la ligne:

  

this.button1.Click + = new System.EventHandler (this.button1_Click);

à:

  

this.button1.Click + = new System.EventHandler (this.button1_Click);

il devrait fonctionner.

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