日期:2014-05-18  浏览次数:20651 次

文本框获取到焦点的一个执行过程
因为我在写程序遇到一个问题,所以自己写了一个简单的测试。
加入两个文本框,添加得到焦点的事件。然后分别设置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();
        }



运行程序,默认textBox1得到的焦点,当我按Tab时直接用鼠标单击textBox2时,按道理代码执行过程是
textBox2_Enter()--textBox1_Enter()--结束,但是当按Tab时,textBox1_Enter()会连续执行两次;当用鼠标单击textBox2执行过程更复杂,textBox2_Enter--textBox1_Enter--textBox1_Enter--textBox2_Enter--textBox1_Enter--textBox1_Enter--结束
为什么会这样,我希望是textBox2_Enter()--textBox1_Enter()--结束  就行了啊,,

------解决方案--------------------
这个跟Winform的.NET框架有关,微软肯定知道,嘿嘿。
------解决方案--------------------
详细请看这个http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.enter.aspx,它是Control.Enter 事件而不是Control.Click事件里
------解决方案--------------------
用焦点离开事件
离开的时候判断
编号时间等等
然后再判断要不要textBox1.Select();
------解决方案--------------------
我比较好奇的是这个文本框既然不能获得焦点那你放在在画面上干嘛?
这种诡异的需求的目的是?
如果只是不想tab到textbox上,直接tabstop属性就可以
------解决方案--------------------
不好意思,搞错了。看来用了Enter事件就不能再用Focus()或者Select(),如果有这个需求,应该考虑用其他事件。