3

わかりましたので、C# の学習に役立つ Tic-Tac-Toe ゲームを作成中です。少し機能を追加しようとしているので、コンピューターで NumPad を使用してボタンのクリックをシミュレートできるようにしたいと考えています。

これが私が持っているものですが、NumPadを使用するとボタンをクリックしません。どなたか理由が分かる方いらっしゃいますか?

    //===============================
    // 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);
        }
    }
4

2 に答える 2

5

編集
私が何を意味するのかをより明確にする必要があることに気づきました...

投稿したコードから、キーイベントを追加したコントロールが 9 つあると思われます。これらのコントロールは、フォーカスされている場合にのみキー イベントを受け取ります。

フォームのキーをグローバルに処理するには、に設定Form.KeyPreviewする必要がありますtrue。また、あなたのようにキーを処理するのではなく、Form.KeyDownイベントを追加して次のように記述します。

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

これにより、フォーム内の NumPad キーが処理されます。その後、質問に投稿したすべてのイベント ハンドラーを削除できます。

プログラムでボタンを「クリック」するには、Button.PerformClick()メソッドを使用する必要があります。クリック イベントに複数のイベント ハンドラーを追加することができ、それ以外の方法では呼び出されない可能性があります。

EDIT 2
ステートメント の構文switchが無効でした。もちろん、すべての「ケース」はcaseキーワードで始まる必要があります...これで機能するはずです。

于 2009-11-27T08:48:40.633 に答える
1

button1.PerformClick();イベントを正しく呼び出すには、すべてのボタンに使用する必要があり ます。ここに情報があります。

于 2009-11-27T08:51:11.987 に答える