在文本框中按下键时,KeyDown事件发生在KeyPress之前。为什么KeyPress的消息框在KeyDown之前显示?
我用一个计数和消息框来看看会发生什么。
以下是我的代码:
int Ncount = 0;
private void Textbox_KeyDown(object sender, KeyEventArgs e)
{
Ncount += 1;
MessageBox.Show("KeyDown's Ncount : " + Ncount.ToString());
}
private void Textbox_KeyPress(object sender, KeyPressEventArgs e)
{
Ncount += 1;
MessageBox.Show("KeyPress's Ncount : " + Ncount.ToString());
}
当按下一个键,这首先会显示...
KeyPress's Ncount : 2
...其次是这样的:
KeyDown's Ncount : 1
不应该在KeyPress消息框(带Ncount 2)之前显示KeyDown消息框(带有NCount 1)吗?
我想所有的MessageBox.Show调用都在一个堆栈中,并且在Windows准备就绪后立即调用。这意味着第一个窗口位于堆栈的底部,第二个窗口首先弹出。这没有得到证实,只是一个猜测。 –
使用Ncount只是为了确保KeyDown在KeyPress之前发生。 Ncount被初始化为零。 – edwhere0963
嗯,我只是简单地把一个断点,看看哪一个被调用第一个 –