你的位置:首页 > ASP.net教程

[ASP.net教程]ShowDialog函数与Form的Activated函数同时使用的陷阱


  当我们需要在form启动之时,焦点显示在特定的控件“btn”上,我们可以先将btn的TabIndex设为0,然后要确保它visible=true,最后在Form的Activated事件方法中btn.GetFocus().

一般这样来说是已经万无一失的。但当这个form要以模态窗口显示时,我们就要注意Activated事件方法里面的代码了,如果该方法里含有一些复归操作,那你可能就神不知鬼不觉的会被莫名其妙

的bug缠住不放了。这一切是因为当Form以模态窗口出现时,Form一直在获取焦点,Activated函数会被连续不断的调用,自然也就一直在复归。

  试验方法,

模态显示:

Form1 myForm=new Form1();myForm.ShowDialog();

myForm的Activated函数:

 private void Form1_Activated(object sender, EventArgs e)    {      MessageBox.Show("wtf");    }

运行发现MessageBox一直出现。

此时可以使用Shown事件来代替Activated事件解决问题,Shown事件发生在窗体的第一次显示,且Shown事件发生时,Form里的所有控件都已准备完毕,不存在focus控件不起作用的问题。