2010-08-27 30 views
2

J'essaye de construire un programme qui a un bouton, et chaque fois que ce bouton est cliqué, il déplace le bouton et ajoute au score. Toutefois, j'essaie de désactiver la touche Entrée ou de supprimer la commande lorsque vous appuyez dessus. Voici ce que j'ai jusqu'à présentAucune surcharge pour 'insert_method_here' correspond au délégué 'System.EventHandler'

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

C'est ce que j'ai ajouté pour éviter 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 au délégué 'System.EventHandler' "Et lorsqu'on clique dessus pour afficher l'emplacement, il ouvre le code pour Form1.Designer et pointe vers cette ligne. "this.button1.Click + = new System.EventHandler (this.button1_Click);"

Toute aide sur la résolution de ce problème serait très appréciée.

Répondre

7

Votre signature de méthode ne correspond pas EventHandler délégué (c'est-à-dire que vous ne pouvez pas simplement ajouter KeyEventArgs argument et que cela fonctionne). Vous devrez gérer plus d'un événement pour faire ce que vous voulez (voir KeyDown ou KeyPress événements).

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

+0

J'ai essayé de mettre les deux Form1_KeyDown private void (object sender, KeyEventArgs e) et private void button1_KeyDown (expéditeur d'objet, KeyEventArgs e) Avec l'instruction if dans le programme et aucune des choses empêcher la touche d'entrée de fonctionner. – Cistoran

+0

@Cistorian essayer événement «MouseClick» alors, il devrait ignorer entrer la clé par conception – max

+0

Que voulez-vous dire essayer MouseClick? Essayez-le avec quoi? – Cistoran

1

Eh bien, je pense que le problème est dans votre décélération de button1_click().

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

delegate void EventHandler(Object sender, EventArgs e) 

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

0

Le délégué EventHandle est deux paramètres et non trois. et votre méthode a trois paramètres, donc c'est faux.

voir: EventHandler delegate information in msdn

d'abord, votre être amené à 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 ce sera une exception.

0

J'ai eu un problème similaire. Le délégué EventHandler est un modèle. Public delegate void EventHandler (expéditeur d'objet, TEventArgs e);

Donc, si vous modifiez la ligne:

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

à:

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

cela devrait fonctionner.

+14

Les lignes sont les mêmes ... –