HOWTO · Csharp

C# でキーを押すことをシミュレートする

この記事では、C# でキーを押すことをシミュレートする簡単で簡単な方法を学びます。

この記事では、C# でキーを押すことをシミュレートするための迅速で簡単なアプローチを示します。

テスト中に、押された一連のボタン(キーストローク)を選択したオブジェクト(コントロールまたはウィンドウ)に送信する必要がある場合があります。選択したコントロールまたはウィンドウにキーコードを送信することにより、キーワードテストおよびスクリプトからのキーストロークをシミュレートできます。

C# でフォームアプリケーションを作成する

まず、VisualStudio で新しい Windows フォームアプリケーションを作成します。

.cs デザインファイルを開き、numberLabel という名前のラベルを作成し、"Text To Be Displayed"にできるテキストを割り当て、中央に配置してきれいに見えるようにします。

numPadButtonalphabetButton を作成し、両方のボタンに"Click Me"テキストを追加しましょう。numPadButton をダブルクリックすると、numPadButton_Click 関数に移動します。

この関数内で、numberLabel にテキストを割り当てます。このテキストは、割り当てるキーを押すと表示されます。

private void numPadButton_Click(object sender, EventArgs e) {
  numberLabel.Text = "Numpad Button 0 Pressed";
}

alphabetButton でも同じ手順を実行します。alphabetButton_Click 関数内で、numberLabel にいくつかの異なるテキストを割り当てます。このテキストは、押された別のキーで表示されるためです。

private void alphabetButton_Click(object sender, EventArgs e) {
  numberLabel.Text = "Enter Pressed";
}

出力:

C# でフォームアプリケーションを作成する

キーボードイベントがフォームに登録されているかどうかを判断するフォームの KeyPreview 機能を有効にする必要があります。したがって、フォーム全体をクリックし、右側のプロパティパネルから、KeyPreview 値を true に設定します。

次に、keypress イベントを識別して処理する KeyDown イベントが必要です。これを追加するには、プロパティパネルに移動し、稲妻の記号が付いた[イベント]タブを開きます。KeyDown イベントまで下にスクロールして、それをダブルクリックします。

Form1_KeyDown() メソッドを作成し、このメソッドに移動します。このメソッドは、タイプ objectsender とタイプ KeyEventArgs のイベント e の 2つの引数を取ります。

private void Form1_KeyDown(object sender, KeyEventArgs e) {}

次に、ボタンのクリックを使用して、特定のキーの押下を模倣する必要があります。この関数はプッシュされたキーを受け取り、受け取ったキーが NumPad0 であるかどうかを確認してから、numPadButton をクリックします。

if (e.KeyCode == Keys.NumPad0) {
  numPadButton.PerformClick();
}

alphabetButton では、同じプロセスに従う必要があります。したがって、[イベント]タブで、KeyUp イベントをダブルクリックし、Form1_KeyUp() 関数内で、受信したキーがEnterであるかどうかを確認してから、alphabetButton をクリックします。

using System;

namespace SimulateKeyPress {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void numPadButton_Click(object sender, EventArgs e) {
      numberLabel.Text = "Numpad Button 0 Pressed";
    }

    private void alphabetButton_Click(object sender, EventArgs e) {
      numberLabel.Text = "Enter Pressed";
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e) {
      if (e.KeyCode == Keys.NumPad0) {
        numPadButton.PerformClick();
      }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e) {
      if (e.KeyCode == Keys.Enter) {
        alphabetButton.PerformClick();
      }
    }

    private void numberLabel_Click(object sender, EventArgs e) {}
  }
}

出力:

キーボードからテンキー0を押したとき。

キーボードからテンキー0 が押された

キーボードからEnterが押されたとき。

キーボードから Enter キーが押された