まず最初に一番元となるフォームのプロパティ内にある KeyPreview を true にしてキーボードの入力を受け付けるようにする必要がある。その上でキー関係のイベントを作成する
コントロールのPreviewKeyDownイベントに関しては注意が必要でこのイベントが正常に処理される為にはイベントもとのコントロールにフォーカスが合っている必要がある
なのでコントロールにカーソルが進入してきた際、発生するMouseMoveイベント内でFocus()メソッドを実行し該当するコントロールにフォーカスを合わせた上でキー入力イベントを拾うと良い
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
panel1.Focus();
Point point = Point.Empty;
point.X = ClientMousePosition.X - panel1.Location.X + panel1.HorizontalScroll.Value;
point.Y = ClientMousePosition.Y - panel1.Location.Y + panel1.VerticalScroll.Value;
label1.Text = point.ToString();
}
private void panel1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
e.IsInputKey = true; //矢印キーやtabキー等の入力を受け付ける
int gridSize = ((Grid)comboBox1.SelectedItem).GridSize;
switch (e.KeyCode)
{
case Keys.G:
checkBox1.Checked = !checkBox1.Checked;
break;
case Keys.Down:
ScrollHelper(ref panel1, 0, gridSize);
break;
case Keys.Up:
ScrollHelper(ref panel1, 0, -gridSize);
break;
case Keys.Left:
ScrollHelper(ref panel1, -gridSize, 0);
break;
case Keys.Right:
ScrollHelper(ref panel1, gridSize, 0);
break;
}
}
最終更新:2012年09月06日 16:14