首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# 文本框的keypress和keydown事件,发生的顺序为什么会颠倒的?该如何解决

2012-01-20 
c# 文本框的keypress和keydown事件,发生的顺序为什么会颠倒的?本来是先keydown,再keypress的。如果两个事件

c# 文本框的keypress和keydown事件,发生的顺序为什么会颠倒的?
本来是先keydown,再keypress的。

如果两个事件里面同时有一个MessageBox.Show()

就会变成先keypress,后keydown。

为什么会这样?

[解决办法]
不PRESS怎么DOWN
[解决办法]
所以顺序 PRESS ,DOWN,UP
[解决办法]
是这样的吧.

[解决办法]
查下这两个词的意思就晓得了
[解决办法]
keydown 按下键盘某键时触发
keypress 按下某个字符键(ASCII码)时触发
KeyPress与KeyDown关心的是不同的内容。
在KeyPress中关心的是输入了什么内容,而KeyDown关心按下了什么键。
所有按下不同的键,弹出的MessageBox先后顺序就会不一样!
[解决办法]
楼上说的有理,如果可以测试一下,如果按键盘上的F1-F12功能键,那么先弹出Down,按A-Z先弹出Press,测试了一部分。
顺序会不一样的。
[解决办法]
不要钻牛角尖了,这种问题没什么很值得研究的必要,两个事件的功能不同,所要捕捉的东西也不同。
[解决办法]
keydown 按下键盘某键时触发
keypress 按下某个字符键(ASCII码)时触发
KeyPress与KeyDown关心的是不同的内容。
在KeyPress中关心的是输入了什么内容,而KeyDown关心按下了什么键。
所有按下不同的键,弹出的MessageBox先后顺序就会不一样!
正解
[解决办法]
举个例子,阿里打拳击,打一个下勾拳,我们会惊叫:“阿里打组合拳了。”因为一套组合拳是由上勾拳和下勾拳组合而成的。keypress就是类似这样的原理,在keydown发生前就已经触发了这个事件,而发生之后接着就是keydown,再后面是keyup,并不会在keyup后再去触发一下keypress事件。
[解决办法]
没一个认真看贴回答的.答案也多是COPY来的.不止楼主郁闷,我也郁闷.
[解决办法]
在这样的事件里不要用MessageBox来显示信息,这样会使控件的焦点失去而变得处理不正常.
[解决办法]
关键在keypress触发的时机。
一个按键动作结束时才会触发keypress事件,正常情况下是在keydown事件之后。
但是MessageBox.Show会触发一个windows事件,系统会认为这时按键动作已经结束,因此“提前”触发了keypress事件。最后的结果就是在keydown事件中触发了keypress事件。
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
this.textBox1.Text += "KeyDown before message box!\r\n ";
MessageBox.Show( "KeyDown! ");
this.textBox1.Text += "KeyDown after message box!\r\n ";
}

private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
this.textBox1.Text += "KeyPress before message box!\r\n ";
MessageBox.Show( "KeyPress! ");
this.textBox1.Text += "KeyPress after message box!\r\n ";
}
运行一下这个代码就很清楚了。

在keydown中调用其它触发windows事件的方法应该也都是这样。

热点排行