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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top