c#中为什么Button的KeyDown事件不能接收方向键 在c#中,为一个Button添加KeyPress事件,我发现当然下方向键 上下左右后什么事情都不做。哪位神仙告诉我这是怎么回事啊?小弟谢啦!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MDSDN中用说明, KeyPress 不支持方向键 ,换用KeyDownprivate void textBox3_KeyDown(object sender, KeyEventArgs e){ if (e.KeyCode == Keys.Up) { MessageBox.Show("Up"); } if (e.KeyCode == Keys.Right) { MessageBox.Show("Right"); }} 不要用KeyPress用keyup。。 private void button1_KeyUp(object sender, KeyEventArgs e) { } 看实际需求.KeyPress是不支持上,下左右的.. 因为KeyPress一般是用于输入的也就是, 字母, 数字, 符号 哎呀,不好意思,发现问题描述错了。对不起!我是说的KeyDown的,比如下面的代码 private void button1_KeyDown(object sender,KeyEventArgs e){ if(e.KeyCode==Keys.Up) { MessageBox.Show("keys up"); } if(e.KeyCode==Keys.A) { MessageBox.Show("Keys A"); }}结果,我按方向键,什么框也没弹出。而如果按下A,就有。当我用Form来接收KeyDown的时候,就都有反应。所以我想问的是,这是为什么?---------------- 因为form里有KeyPreview属性,把它设置为true,而button里没有 private void Form1_KeyDown(object sender, KeyEventArgs e){switch (e.KeyCode){case Keys.Up: { break; }case Keys.Down: { break; }}} form中KeyPreview属性改为true即可 还是不行。我发现默认情况下,按钮这样的控件会接受焦点。一旦接收焦点,那么方向键就只会被用来转移焦点,根本接收不到KeyDown事件。把TabStop改为false就行 必须重写Button控件的IsInputKey方法。默认的Button在这个方法中过滤掉了方向键。 重写 protected override bool ProcessDialogKey(Keys keyData) { switch (keyData) { case Keys.Left: MessageBox.Show("左"); break; case Keys.Right: MessageBox.Show("右"); break; case Keys.Up: MessageBox.Show("上"); break; case Keys.Down: MessageBox.Show("下"); break; } return true; } previewkeydown事件 里设置e.isputkey=true; 10楼的也太夸张了吧。要重写Button的方法岂不是要写一个类来继承Button?12楼的不知道previewkeydown的是哪个的,是form的还是每个button的?设置了又到哪里去判断是不是方向键呢?11楼的可以,非常感谢。不过,我又有新的疑问,这样重写的话,Tab键就不起作用了。我想到可能是重载没有调用父类的方法,所以加了句base.ProcessDilogKey(keyData);Tab键可以用了,就是按方向键的时候感觉很别扭。哎,真复杂啊。先结贴吧。 替换word 标签 可是找不到标签 Main返回值? clickonce发布模式怎么制作安装包 请问如何将数据库绑定在DropDownlist里啊????急等! 在C#里如何做最小化 javascript怎么获得Input 的 maxlenth?????请各位大虾帮帮忙 在线等 解决马上结贴 如何扩展Win Form控件? 奇怪的问题,高手来帮忙解决一下,急急急 如何将c# 应用程序发布在网页中? 低价出让vs7正式版,偶有一套vs7(Englist)及急欲转让(5CD),有意请进... Microsoft.Win32 的疑问 常量字符串的初始话
{
if (e.KeyCode == Keys.Up)
{
MessageBox.Show("Up");
}
if (e.KeyCode == Keys.Right)
{
MessageBox.Show("Right");
}
}
{ }
也就是, 字母, 数字, 符号
我是说的KeyDown的,
比如下面的代码
private void button1_KeyDown(object sender,KeyEventArgs e)
{
if(e.KeyCode==Keys.Up)
{
MessageBox.Show("keys up");
}
if(e.KeyCode==Keys.A)
{
MessageBox.Show("Keys A");
}
}
结果,我按方向键,什么框也没弹出。
而如果按下A,就有。
当我用Form来接收KeyDown的时候,就都有反应。所以我想问的是,这是为什么?----------------
{
switch (e.KeyCode)
{
case Keys.Up: { break; }
case Keys.Down: { break; }}
}
{
switch (keyData)
{
case Keys.Left: MessageBox.Show("左"); break;
case Keys.Right: MessageBox.Show("右"); break;
case Keys.Up: MessageBox.Show("上"); break;
case Keys.Down: MessageBox.Show("下"); break;
}
return true;
}
12楼的不知道previewkeydown的是哪个的,是form的还是每个button的?设置了又到哪里去判断是不是方向键呢?
11楼的可以,非常感谢。不过,我又有新的疑问,这样重写的话,Tab键就不起作用了。我想到可能是重载没有调用父类的方法,所以加了句base.ProcessDilogKey(keyData);Tab键可以用了,就是按方向键的时候感觉很别扭。哎,真复杂啊。先结贴吧。