日期:2014-05-17  浏览次数:20929 次

关于在文本框的Enter事件去设置焦点后,代码执行过程很不解。
因为我在写程序遇到一个问题,所以自己写了一个简单的测试。(所以大家不要看业务逻辑对不对,纯技术讨论)
两个文本框textBox1,textBox2的TabIndex为1和2。

C# code

private void textBox1_Enter(object sender, EventArgs e)
        {
            string str = "";
        }

private void textBox2_Enter(object sender, EventArgs e)
        {
            string str = "";
            textBox1.Focus();
        }


大家也可以去http://pan.baidu.com/share/link?shareid=20750&uk=3508334657下载项目。
问题是,当焦点在textBox1时,按TAB或单击textBox2,把焦点切换到textBox2时,其结果焦点肯定还是textBox1上,执行过来也应该是先执行textBox2_Enter,然后textBox1_Enter,就该结束了,但是实际情况(执行过程却不是这样的),
但是:
当按Tab时,textBox1_Enter会连续执行两次,即:textBox2_Enter-textBox1_Enter-textBox1_Enter
单击时更折腾:
textBox2_Enter--textBox1_Enter--textBox1_Enter--textBox2_Enter--textBox1_Enter--textBox1_Enter

这是为什么啊,求解中


------解决方案--------------------
你应该是想在2失去焦点之后触发一些判断吧,如果通过,则回归焦点在1上
如果是这样,那么触发事件应该是Leave,而不是Enter
------解决方案--------------------
你在这个函数focus之前或之后加个messagebox试试,
private void textBox2_Enter(object sender, EventArgs e)
{
string str = "";
textBox1.Focus();
}