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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top