Keine Überlastung für ‚insert_method_here‘ Spiele Delegierten System.EventHandler '
-
01-10-2019 - |
Frage
Ich versuche, ein Programm zu erstellen, das eine Schaltfläche hat, und jedes Mal, dass Schaltfläche geklickt wird, bewegt er sich auf den Button und fügt zu der Partitur. Aber ich versuche, die Enter-Taste oder unterdrücken Sie den Befehl zu deaktivieren, wenn sie gedrückt. Hier ist, was ich habe, so weit
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();
}
Dies ist, was ich hinzugefügt aus gehen in die Enter-Taste zu verhindern.
if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }
Allerdings erzeugt es der Fehler ... „Keine Überlastung für‚button1_Click‘steht Delegierten System.EventHandler '“ Und wenn sie angeklickt um den Ort zu zeigen, öffnet sie den Code für Form1.Designer und zeigt auf dieser dieser Linie. "This.button1.Click + = new System.EventHandler (this.button1_Click);"
Jede Hilfe zu Lösung dieses Problems würde sehr geschätzt werden.
Lösung
Ihre Methodensignatur nicht EventHandler
Delegierten überein (das heißt, Sie können nicht nur KeyEventArgs
Argument hinzufügen und diese Arbeit bekommen). Sie benötigen mehr als ein Ereignis behandeln zu tun, was Sie (Blick auf KeyDown
oder KeyPress
Ereignisse) wollen.
Alternativ Verwendung MouseClick
Ereignis statt Click
Ereignis.
Andere Tipps
Nun, ich denke, dass das Thema in Ihrer Angabe von button1_click()
ist.
Event-Handler Eine kann nur hat die Unterschrift von
delegate void EventHandler(Object sender, EventArgs e)
So nehmen Sie den Tastendruck aus button1_click
, und steckt es in einer KeyPress
Veranstaltung.
EventHandle delegiert, sind zwei Parameter, nicht drei. und Ihre Methode hat drei Parameter, so dass es falsch ist.
siehe: Eventhandler Delegat Informationen in Msdn
Zuerst Sie haben Ihre Methode zu ändern:
private void button1_Click(object sender, EventArgs e)
{
}
und richtet dann die Art der Methode wie folgt:
KeyEventArgs k = null;
if(e is KeyEventArgs){
k = (KeyEventArgs) e;
//do sth here about pressing 'enter'
}
Delegierter, Verfahren müssen die gleichen Parameter haben, den gleichen Rückgabetyp, oder es wird Ausnahme sein.
Ich hatte ein ähnliches Problem. Der Eventhandler Delegat ist eine Vorlage.
public delegate void Eventhandler (object sender, TEventArgs e);
Wenn Sie also die Zeile:
this.button1.Click + = new System.EventHandler (this.button1_Click);
zu:
this.button1.Click + = new System.EventHandler (this.button1_Click);
sollte es funktionieren.