プロが教える店舗&オフィスのセキュリティ対策術

C#で矢印キーが押されたとき、値を増減するといった単純なプログラムを書きたいです。

画面上のテキストボックスのkeyDown イベントの処理部で処理すればよいことはわかりますが、
押されたキーイベント KeyEventArgs e からどうやって矢印キーであるかの判断をする部分のプログラムが書けません
気持としては以下の通りです。正しいコードに修正したいです。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if(e.key == '↑') n++;
else if (e.key == '↓') n--;
else if (e.key == '0') n=0;
}

A 回答 (2件)

WPFでしたか。



public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private int n = 0;

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Up:
n++;
break;
case Key.Down:
n--;
break;
case Key.D0:
case Key.NumPad0:
n = 0;
break;
}

// キー入力を無効にしたいなら
e.Handled = true;

Console.WriteLine(n.ToString());
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。動きました!

WPFでは、
 e.KeyData Keys.Down
の代わりに
 e.key key.Down
なのですね。
なんで変えたのかしら? ややこしいですね。
ありがとうございました。

お礼日時:2017/08/03 15:37

public partial class Form1 : Form


{
public Form1()
{
InitializeComponent();
}

private int n = 0;

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyData)
{
case Keys.Up:
n++;
break;
case Keys.Down:
n--;
break;
case Keys.D0:
case Keys.NumPad0:
n = 0;
break;
}

Console.WriteLine(n.ToString());
}
}

Shift, Ctrlとかが押されていても反応しません。
それらが押されていても関係なく反応してほしいなら、e.KeyCodeで判断します。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

早速、試してみましたが、
 e.Key
 e.KeyboardDevice
 e.KeyStates
はありますが、
 e.KeyData は無い
と怒られてしまいました。
さらに、あるという3種類いずれでもエラーが出て動きませんでした。

環境は、
 Win8/64, VS2010 C#, WPFアプリケーション
です。

引き続き、回答お待ちしています。

お礼日時:2017/08/03 14:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!