using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
int deltX = 10;
int deltY = 8;
public Form1()
{
this.KeyPreview = true;
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
this.label1.Left += deltX;
this.label1.Top += deltY;
if (this.label1.Top < 0 ||
this.label1.Top + this.label1.Height > this.Height)
deltY = -deltY;
if (this.label1.Left < 0 ||
this.label1.Left + this.label1.Width > this.Width)
deltX = -deltX;
}
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Application.Exit();
}
private void label1_Click_1(object sender, EventArgs e)
{
}
}
}
Form1_KeyDown有没有关联给窗体的keydown事件,窗体的keypreview属性是否设置为true
确定一下你的keydown事件有没有关联 我这样是可以的啊
public partial class Form2 : Form
{
int deltX = 10;
int deltY = 8;
public Form2()
{
this.KeyPreview = true;
InitializeComponent();
timer1.Tick += timer1_Tick;
this.KeyDown += Form1_KeyDown;
}
private void timer1_Tick(object sender, EventArgs e)
{
this.label1.Left += deltX;
this.label1.Top += deltY;
if (this.label1.Top < 0 ||
this.label1.Top + this.label1.Height > this.Height)
deltY = -deltY;
if (this.label1.Left < 0 ||
this.label1.Left + this.label1.Width > this.Width)
deltX = -deltX;
}
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Application.Exit();
}
private void label1_Click_1(object sender, EventArgs e)
{
}
}
楼上说的有道理,但是你要注意就是你的Form在运行的过程中是不是有其他的程序占用了你程序的焦点,如果你的程序没有处于激活状态或者被类似于流氓软件占用了焦点,那你的Key_Down事件自然无法在你的Form窗体内触发,这种情况可以使用键盘钩子,可以突破Form层面的监视操作系统的相关操作
keydown,是一个动词,事件必须关联你写的词,form1中keypreview,是确定窗体keydown是否注册,没有注册就不能运行,所以必须为true