Aucune surcharge pour « insert_method_here » correspond délégué « System.EventHandler »
-
01-10-2019 - |
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é.
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.