質問

わかりました。だから、私はC#の学習を支援するために三目並べゲームを作成しているところです。 私はそれに少しの機能を追加しようとしているので、ボタンをクリックすることをシミュレートするためにコンピューターで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);
        }
    }
役に立ちましたか?

解決

編集
私が意味することをより明確にしなければならないことに気付いた...

投稿したコードから、キーイベントを追加した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-Keysが処理されます。質問に投稿したすべてのイベントハンドラーを削除できます。

プログラムで「クリック」するにはボタンの場合は、 Button.PerformClick()メソッドを使用する必要があります。クリックイベントに複数のイベントハンドラーが追加される場合があり、そうでない場合は呼び出されません。

編集2
switch -statementの構文が無効でした。もちろん、すべての「ケース」は case キーワードで始まる必要があります...これで動作するはずです。

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top