Nessun sovraccarico per 'insert_method_here' corrisponde delegato 'System.EventHandler'
-
01-10-2019 - |
Domanda
Sto cercando di costruire un programma che ha un pulsante, e ogni volta che viene cliccato il pulsante, si muove il pulsante e aggiunge al punteggio. Comunque, sto cercando di disattivare il tasto Invio, o sopprimere il comando quando viene premuto. Ecco quello che ho finora
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();
}
Questo è quello che ho aggiunto per evitare che il tasto Invio di andare in.
if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }
Tuttavia esso genera l'errore ... "No sovraccarico per 'button1_Click' corrisponde delegato 'System.EventHandler'" E quando si fa clic per mostrare la posizione, si apre il codice per Form1.Designer e punti a questo questa linea. "This.button1.Click + = new System.EventHandler (this.button1_Click);"
Qualsiasi aiuto su come risolvere il problema sarebbe molto apprezzato.
Soluzione
La tua firma metodo non corrisponde EventHandler
delegato (che è, non si può semplicemente aggiungere argomento KeyEventArgs
e ottenere questo lavoro). Avrete bisogno di gestire più di un evento di fare ciò che si vuole (sguardo agli eventi KeyDown
o KeyPress
).
In alternativa, evento uso MouseClick
invece di evento Click
.
Altri suggerimenti
Beh, penso che il problema è nella tua decleration di button1_click()
.
Un gestore di eventi può avere solo la firma di
delegate void EventHandler(Object sender, EventArgs e)
Quindi, prendere la stampa chiave di button1_click
, e lo mise in un evento KeyPress
.
EventHandle delegato, è di due parametri, non tre. e il metodo ha tre parametri, quindi è sbagliato.
vedi: EventHandler informazioni delegato in MSDN
Per prima cosa, il tuo essere necessario modificare il metodo:
private void button1_Click(object sender, EventArgs e)
{
}
e poi giudicare il tipo nel metodo come questo:
KeyEventArgs k = null;
if(e is KeyEventArgs){
k = (KeyEventArgs) e;
//do sth here about pressing 'enter'
}
delegato, metodo deve avere gli stessi parametri, lo stesso tipo di ritorno, o sarà un'eccezione.
Ho avuto un problema simile. Il delegato EventHandler è un modello.
Delegato pubblico EventHandler void (object sender, TEventArgs e);
Quindi, se si cambia la linea:
this.button1.Click + = new System.EventHandler (this.button1_Click);
a:
this.button1.Click + = new System.EventHandler (this.button1_Click);
dovrebbe funzionare.