Winフォームアプリでコントロールをキー入力でスムーズに動かす方法
キー入力をイベントでハンドラを動かそうとすると、ツッ、ツーーーーというように1入力目がカクつくのが解ります
これは、意味があって、通常メモ帳を含め人が入力する場合、キーをタップしたときに2つ入力されないように配慮されているからです
キー入力をイベントで受ける方法(カクつきます)
using System.Windows.Forms;
namespace ControlMove
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
pictureBox1.Left += 2;
}
else if(e.KeyCode==Keys.Left)
{
pictureBox1.Left -= 2;
}
}
}
}
キー入力をイベントで受ける方法(カクつかない)
ゲームの場合、この仕様は辛いですね
なので、タイマーイベントを活用した方法を紹介します
System.Windows.Input名前空間のKeybordクラスを使います
Key.Right等でのエラーは、インテリセンスで参照を追加してください
using System;
using System.Windows.Forms;
using System.Windows.Input;
namespace ControlMove
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Timer timer = new Timer();
// 20ms毎にタイマーイベントを発生させる設定とします
timer.Interval = 20;
// イベントを登録します
timer.Tick += PictureMove;
// タイマーを起動します
timer.Enabled = true;
}
private void PictureMove(object sender, EventArgs e)
{
if (Keyboard.IsKeyDown(Key.Right))
{
pictureBox1.Left += 2;
}
else if (Keyboard.IsKeyDown(Key.Left))
{
pictureBox1.Left -= 2;
}
}
}
}
タイマーイベントについて
別ページにまとめてあります
ディスカッション
コメント一覧
まだ、コメントがありません