Frage

Ok, so bin ich in dem Prozess ein Tic-Tac-Toe-Spiel macht mir C # zu helfen, lernen. Ich versuche, ein wenig Funktionalität, um es hinzuzufügen, so möchte ich die Menschen die NumPad auf einem Computer zu verwenden, um der Lage sein, um die Tasten zu simulieren klicken.

Hier ist, was ich habe, aber wenn ich die NumPad die Tasten verwenden, klicken Sie nicht. Kann jemand von euch einen Grund sehen, warum?

    //===============================
    // start NumPad Simulate Clicks
    //   NumPad  MyButtons
    //   7 8 9   1 2 3
    //   4 5 6   4 5 6 
    //   1 2 3   7 8 9
    //===============================
    public void myControl_NumPad7(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad7)
        {
            button1_Click(null, null);
        }
    }
    public void myControl_NumPad8(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad8)
        {
            button2_Click(null, null);
        }
    }
    public void myControl_NumPad9(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad9)
        {
            button3_Click(null, null);
        }
    }
    public void myControl_NumPad4(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad4)
        {
            button4_Click(null, null);
        }
    }
    public void myControl_NumPad5(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad5)
        {
            button5_Click(null, null);
        }
    }
    public void myControl_NumPad6(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad6)
        {
            button6_Click(null, null);
        }
    }
    public void myControl_NumPad1(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad1)
        {
            button7_Click(null, null);
        }
    }
    public void myControl_NumPad2(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad2)
        {
            button8_Click(null, null);
        }
    }
    public void myControl_NumPad3(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad3)
        {
            button9_Click(null, null);
        }
    }
War es hilfreich?

Lösung

Bearbeiten
Bemerkt, dass ich sein klarer, was ich meine ...

Aus dem Code, den Sie geschrieben Ich vermute, Sie haben 9 steuern Sie Ihre Schlüssel-Ereignisse hinzugefügt. Diese Kontrollen werden nur Schlüssel-Ereignisse erhalten, wenn sie fokussiert sind.

Um Tasten global für die Form handhaben, müssen Sie Form.KeyPreview einstellen true. Auch ich würde nicht die Tasten, um die Art und Weise behandeln Sie tun, aber ein Form.KeyDown Ereignis hinzufügen und schreiben so etwas wie:

switch (e.KeyCode)
{
    case Keys.NumPad9:
        e.Handled = true;
        button3.PerformClick();
        break;
    case Keys.NumPad8:
        e.Handled = true;
        button2.PerformClick();
        break;
    // And so on
}

Das wird die NumPad-Keys in Form handhaben -. Sie dann alle Event-Handler entfernen können Sie in Ihrer Frage gestellt

Um programmatisch „Klick“ eine Schaltfläche, sollten Sie die Button.PerformClick() Methode verwenden, da mehr als einen Event-Handler kann das Click-Ereignis hinzugefügt werden, die sonst nicht genannt werden würden.

EDIT 2
Syntax für die switch-Anweisung war ungültig. Natürlich jeder „Fall“ muss es mit dem case Stichwort beginnen ... Nun sollte funktionieren.

Andere Tipps

Sie müssen für jede Taste Ereignis button1.PerformClick(); richtig verwenden aufzurufen, hier ist info .

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