C#でのキーボード操作とは?コード例を用いてご紹介!

。
この記事でわかること
C#におけるキーボード操作
この記事ではC#でフォームアプリケーションを作成する際、キーボード操作として入出力する方法を扱います。
ここで扱うC#でのキーボード操作による入力では、テキストボックス等への入力内容を取得し、大文字小文字などの異なる文字への変更をしたり、特定の文字入力を無効に出来ます。
キーボード操作による出力については、特定のアプリケーションへの文字入力をC#のプログラムで行います。
ここでは二つのテキストボックスとボタンを持つフォームでキーボード操作として入出力するC#プログラムを作成して解説します。
C#でキーボード入力を扱う方法
C#でキーボード操作の文字入力を扱うにはControl.KeyPressイベントを使います。テキストボックス「textBox1」にフォーカスがある時にキーボード操作での「5」が入力された場合に半角の一文字「5」でなく全角の三文字「<5>」を追加するには以下のようにします。
Visual Studioではプロパティウィンドウの操作で関数を追加します。
1 2 3 4 5 6 7 8 9 10 |
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '5') { e.Handled = true; textBox1.AppendText("<5>"); } } |
このコードは、「if (e.KeyChar == ‘5’)」で「5」のキーボード操作による入力が判定された時、「e.Handled = true;」でキーボード操作による入力を無効にし、「textBox1.AppendText(“<5>”);」で「textBox1」に全角の三文字「<5>」を追加します。
関数「private void textBox1_KeyPress(object sender, KeyPressEventArgs e)」の作成に当たっては、Visual Studioのフォームデザイナで「textBox1」にあたるテキストボックスをダブルクリックし、フォーカスのプロパティウィンドウにある稲妻アイコンのイベントをクリック後、「キー」イベントの「KeyPress」をダブルクリックします。
ここでは文字入力について扱いますが、Shift、Control、Alt等の特殊なキーも含めた入力にはControl.KeyDownイベント及びControl.KeyUpイベントを使用します。
C#でキーボード出力を扱う方法
C#でキーボード操作として出力する際にはSendKeys.Sendメソッドを使います。
「button1」がクリックされた際に、「textBox1」の内容を「textBox2」にプログラムでキーボード操作として出力するにはC#では以下のようなコードで行います。
「private void Button1_Click(object sender, EventArgs e)」関数を追加するには、フォームデザイナーの「button1」をダブルクリックします。
1 2 3 4 5 6 |
private void Button1_Click(object sender, EventArgs e) { textBox2.Focus(); SendKeys.Send(textBox1.Text); } |
このコードは、「button1」がクリックされた際に、出力先「textBox2」にフォーカスを移動し、「SendKeys.Send(textBox1.Text);」で「textBox1」の内容でキーボード操作として出力します。
「textBox2」へのフォーカス移動を任意のアプリケーションを起動・アクティブ化するコードに変更する事で、アプリケーションへのキー入力をC#プログラムからのキーボード操作としての出力で自動化できます。
上とは逆に、「button2」がクリックされた際に、「textBox2」の内容を「textBox1」にC#のプログラムでキーボード操作として出力するには以下のようにします。
1 2 3 4 5 6 |
private void Button2_Click(object sender, EventArgs e) { textBox1.Focus(); SendKeys.Send(textBox2.Text); } |
このコードで「textBox1」にキーボード操作として出力することになるので、「textBox2」に半角の「5」が含まれていた場合も「private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)」により、全角三文字の「<5>」が半角の「5」の代わりに追加される事になります。
「textBox2」に全角三文字の「<5>」が入っている場合はその内一文字の「5」も全角であるのでそのまま全角三文字の「<5>」がキーボード操作として出力されます。
つまり、「SendKeys.Send(str)」の「str」に全角文字が含まれていた場合、そのまま全角文字でアクティブなアプリケーションウィンドウに出力されます。
C#における全角文字のキーボード入力
C#でchar型は内部的にUTF-16であるため、e.KeyCharで全角文字を扱えます。
1 2 3 4 5 6 7 8 |
private void TextBox2_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '<') { e.Handled = true; textBox2.AppendText("※"); } } |
「textBox1」に書かれている全角文字の「<」は、「button1」をクリックする事で「textBox2」にキーボード操作として出力されますが、このコードにより「textBox2」に入力された「<」は無視され代わりに「※」が追加されますので、「textBox1」に「<5>」が書かれていれば、「※5>」として「textBox2」に出力されます。
C#でキーボード操作の入出力を扱うサンプルプログラム
以上を踏まえたC#で動作するキーボード操作のサンプルプログラムは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
using System; using System.Windows.Forms; namespace Keyboard_out { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { textBox2.Focus(); SendKeys.Send(textBox1.Text); } private void TextBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '5') { e.Handled = true; textBox1.AppendText("<5>"); } } private void Button2_Click(object sender, EventArgs e) { textBox1.Focus(); SendKeys.Send(textBox2.Text); } private void TextBox2_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '<') { e.Handled = true; textBox2.AppendText("※"); } } } } |
C#でキーボード操作を扱ってみましょう
C#によるキーボード操作の入出力を解説しました。
キーボード操作の入力では、フォームのコントロールへのキーボード操作による入力を制限したり、入力された内容により指定した処理が出来ます。出力はアプリケーション操作の自動化などに使えます。
キーボード操作は基本的でありながら応用も利きますので、C#プログラミングに活かしていきましょう。