关于设置输入焦点的问题
前两个星期测试我写的mobile应用程序,发现一个严重的Bug.有一个对象在传值过程中被突然丢失了.研究了两个星期,没有去解决这个问题,因为这个问题据我所想的,有两种解法.所以这个星期写了一例子,来研究这个问题产生的原因.
在启动窗体里面写的代码
private Form3 objfrm3 = null;
private void button4_Click(object sender, EventArgs e)
{
if ( objfrm3 == null )
{
objfrm3 = new Form3();
}
objfrm3.Owner = this;
//objfrm3.WhichOne = 400;
objfrm3.ShowDialog();
}
在Form3里面写的代码
private void textBox1_GotFocus(object sender, EventArgs e)
{
Debug.WriteLine("Box1");
}
private void textBox2_GotFocus(object sender, EventArgs e)
{
Debug.WriteLine( "Box2" ); }
private void Form3_Load(object sender, EventArgs e)
{
Debug.WriteLine("Load");
this.Show();
this.textBox1.Focus();
}
private void textBox1_LostFocus(object sender, EventArgs e)
{
Debug.WriteLine("Box1 leave");
}
private void textBox2_LostFocus(object sender, EventArgs e)
{
Debug.WriteLine( "Box2 leave" );
}
动作如下,运行程序,单击Button4
打印了:
Load
Box1
然后单击了TextBox2
打印了:
Box1 leave
Box2
Form3右上角的ok,关闭了Form3
打印了:
Box2 leave
再次单击Button4
打印了:
Load
Box2
Box2 leave
Box1
问题就在这里,为什么textBox2_GotFocus要先被调用?
------解决方案--------------------抢沙发,帮顶顶
------解决方案--------------------是不是两个textbox的tabindex反了?box2的tabindex比box1的小 所以先把焦点给了box2,然后你再box.focus(),再把焦点给了box1
------解决方案--------------------我估计是这样的,
你的form3只创建一次实例,第一次关掉后,最后焦点是在textbox2上的,关掉form3,当然textbox2失去焦点,这是自动的,而不是人为改变活动控件
你再次打开form3,最后焦点是在textbox2上的,所以打开form3的时候,它直接得到焦点.但你的textbox1的tabindex肯定最小,默认焦点应该落在应该是textbox1上,于是,系统重新把焦点给了textbox1
------解决方案--------------------在form2的formclosing事件里加上textbox1.focus();就可以了 似乎是像都上说的那样
------解决方案--------------------很经典的代码
http://blog.csdn.net/chinahuyong