KeyDown先发生,还是KeyPress先发生?
通过下面代码的执行结果,似乎是矛盾的:int i = 0;
int press;
int down;
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(string.Format("press:{0} down:{1}", press, down));
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
i++;
press = i;
MessageBox.Show("press");
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
i++;
down = i;
MessageBox.Show("down");
}
首先弹出的对话框显示press,说明KeyPress先发生。
但最后press变量的值为2,down变量的值为1,似乎又说明KeyDown先发生。
谁能解释一下? --------------------编程问答-------------------- KeyDown先发生
从英文意义来说,KeyDown是按下,KeyPress是键被按,当然是KeyDown先了
至于MessageBox的顺序,涉及到这两个Event的消息队列问题
--------------------编程问答-------------------- 换种方法测试,打日志
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
Console.WriteLine("textBox1_KeyPress");
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine("textBox1_KeyDown");
}
结果:
textBox1_KeyDown
textBox1_KeyPress
是KeyDown先执行
组合来看看
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
Console.WriteLine("textBox1_KeyPress");
MessageBox.Show("textBox1_KeyPress");
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine("textBox1_KeyDown");
MessageBox.Show("textBox1_KeyDown");
}
发现:
MessageBox.Show("textBox1_KeyDown");执行后触发了KeyPress事件
所以楼主看到是KeyDown中触发了KeyPress,所以先显示了“press”
道理没啥说的:测试的结果既真理 --------------------编程问答-------------------- 搞卫生的都这么厉害...支持 --------------------编程问答-------------------- zcls
补充:.NET技术 , C#