如下:
private void mainFrm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Console.WriteLine(e.KeyCode);
}
此时用了mainFrm.preview=true就可以工作,如按-->键能打出“Right";问题是:如果mainform上
有了一个button之类的东东,按方向键就不能打出"left","right"等了,按回车也不能打出”enter"
但其它的可以,如按k鍵打出“K”。我估计是keydown消息被button等获取了,但此时如何设定才能得到我要的“left","enter"呢?
private void mainFrm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Console.WriteLine(e.KeyCode);
}
此时用了mainFrm.preview=true就可以工作,如按-->键能打出“Right";问题是:如果mainform上
有了一个button之类的东东,按方向键就不能打出"left","right"等了,按回车也不能打出”enter"
但其它的可以,如按k鍵打出“K”。我估计是keydown消息被button等获取了,但此时如何设定才能得到我要的“left","enter"呢?
{
Console.WriteLine(e.KeyCode);
}
看看是不是就可以了?以上2句猜测而已,本人也不是很清楚,说错别扔东西阿。
的事件好像被Button拦截。可是根据msdn的说明:当此属性设置为 true 时,窗体将接收所有 KeyPress、KeyDown 和 KeyUp 事件。
************************************
在窗体的事件处理程序处理完该击键后,然后将该击键分配给具有焦点的控件很是不理解阿。
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show( sender.GetType().Name );
switch( e.KeyCode )
{
case Keys.Right:
MessageBox.Show("Right");
break;
case Keys.Left:
MessageBox.Show("Left");
break;
case Keys.Up:
MessageBox.Show("Up");
break;
case Keys.Down:
MessageBox.Show("Down");
break;
default:
break;
}
} private void button1_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show( sender.GetType().Name );
switch( e.KeyCode )
{
case Keys.Right:
MessageBox.Show("Right");
break;
case Keys.Left:
MessageBox.Show("Left");
break;
case Keys.Up:
MessageBox.Show("Up");
break;
case Keys.Down:
MessageBox.Show("Down");
break;
default:
break;
}
}
键事件按下列顺序发生: KeyDown
KeyPress
KeyUp
要仅在窗体级别处理键盘事件并且不允许其他控件接收键盘事件,请将窗体的 KeyPress 事件处理方法中的 KeyPressEventArgs.Handled 属性设置为 true。某些键,如 TAB、RETURN、ESCAPE 和箭头键,由控件自动处理。为使这些键引发 KeyDown 事件,必须在窗体上的每个控件中重写 IsInputKey 方法。用于重写 IsInputKey 的代码需要确定是否按下了某一个特殊键,并且需要返回一个 true 值。有关处理事件的详细信息,请参见使用事件。
是不是这样加呀,我试了不行,是我没明白你的意思?
private void mainFrm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Console.WriteLine(e.KeyCode);
//这样加吗?
e.Handled=true;
}
private void mainFrm_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
e.Handled=true;
Console.WriteLine(e.KeyChar );
} private void mainFrm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Console.WriteLine(e.KeyCode);
}
还是不行
swich (e.KeyCoke)
case 'left': ...
case 'right':...
...
而不原用button得到的此消息,因我担心万一某时此buuton没有焦点岂不麻烦。
望指点