在文本框中按下鍵時,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
嗯,我只是簡單地把一個斷點,看看哪一個被調用第一個 –