就用keydown和keyup
keydown是首次按下一个键(没有释放)
keyup是释放了之后
你在keydown里写的是走路的代码(用一个条件判断)
keyup里就写停止的代码(刚才的条件为false)
大概就这样就可以搞定了
要不你这样吧
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D)
textBox1.Text = "行走";
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
textBox1.Text = "停止";
}
例子而已···更复杂的话那就要另外考虑了
记得设置好Form1的属性
我这有的!自己前天写了点啊 你可以看看的
Rectangle rec = new Rectangle(0, 0, 32, 48);
Size addDown = new Size(32, 0);//向下走
Size addxia = new Size(0, 48);
int x;
int y;
Bitmap sorcse;
Bitmap bit;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyValue)
{
case 37:
zou(32,48);
pictureBox2.Location=new Point (pictureBox2.Location.X - 3, pictureBox2.Location.Y);
break;
case 38:
zou(96, 144);
pictureBox2.Location = new Point(pictureBox2.Location.X, pictureBox2.Location.Y-3);
break;
case 39:
zou(64, 96);
pictureBox2.Location = new Point(pictureBox2.Location.X + 3, pictureBox2.Location.Y);
break;
case 40:
zou(0, 0);
pictureBox2.Location = new Point(pictureBox2.Location.X , pictureBox2.Location.Y+3);
break;
}
}
private void zou(int p, int p_2)
{
bit = sorcse.Clone(rec, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
if (rec.Location.Y < 144)
{
rec.Location += addxia;
}
else
{
rec.Location = new Point(p, p_2);
}
pictureBox2.Image = bit;
}
private void Form1_Load_1(object sender, EventArgs e)
{
sorcse = new Bitmap(pictureBox3.Image);
}
其实。。
keyDown就是一直按下。。
你可以这样试一试。。
在窗体中添加keyDown,然后然值显示在form.text中,你就会发现,keyDown可以实现一直按下
keydown 的时候标记一个变量,keyup的时候取消标记这个变量,如:
bool isWDown=false;
在keydown 的时候,isWDown=true;
在keyup的时候,isWDown=false;
然后定义一个timer控件,里面检测isWDown变量
长按会连续触发KeyDown事件,你只要安心处理你的KeyDown就可以了,长按不用你操心