当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,