Domanda

Ok, quindi sto preparando un gioco Tic-Tac-Toe per aiutarmi a imparare C #. Sto tentando di aggiungere un po 'di funzionalità ad esso, quindi voglio che le persone siano in grado di utilizzare il NumPad su un computer per simulare il clic sui pulsanti.

Ecco quello che ho ma quando uso il NumPad i pulsanti non fanno clic. Qualcuno di voi può vedere un motivo per cui?

    //===============================
    // 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);
        }
    }
È stato utile?

Soluzione

Modifica
Ho notato che devo essere più chiaro su cosa intendo ...

Dal codice che hai postato sospetto che tu abbia 9 controlli a cui hai aggiunto i tuoi eventi-chiave. Questi controlli riceveranno eventi-chiave solo quando sono focalizzati.

Per gestire le chiavi a livello globale per il modulo, è necessario impostare Form.KeyPreview su true . Inoltre, non gestirò le chiavi come fai tu, ma aggiungerei un evento Form.KeyDown e scrivo qualcosa del tipo:

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

Questo gestirà i tasti NumPad all'interno del modulo: puoi quindi rimuovere tutti i gestori di eventi che hai pubblicato nella tua domanda.

Per programmare " fai clic su " un pulsante, dovresti usare il metodo Button.PerformClick () , poiché all'evento click potrebbe essere aggiunto più di un gestore di eventi, che non si chiamerebbe altrimenti.

MODIFICA 2
La sintassi per lo switch -statement non era valida. Ovviamente ogni "caso" deve iniziare con la parola chiave case ... Ora dovrebbe funzionare.

Altri suggerimenti

Devi usare button1.PerformClick (); per ogni pulsante per invocare correttamente l'evento, ecco info .

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