是否有任何案例表明Form的Activated事件没有被提出?

时间:2013-04-25 14:37:57

标签: c# winforms events raiseevent

我不明白为什么会这样,我认为应该在显示表单时引发Activated。事实上,我的表单将TopLevel设置为false,并将其添加到另一个表单中。当主窗体显示时,它也是可见的,我可以与它的控件进行交互,但我测试并看到Activated没有被提升。

public MainForm(){
     InitializeComponent();
     Form child = new Form();
     child.Activated += (s,e) => {
        MessageBox.Show("Activated!");
     };
     child.Size = new Size(200,100);
     child.TopLevel = false;
     child.Show();
     child.Parent = this;
}

运行MainForm后,子窗体出现在主窗体内,并且没有显示任何MessageBox,并显示消息“已激活!”。

要让它加注,还有什么额外的工作要做?

3 个答案:

答案 0 :(得分:2)

如果第一张表格第一次进入屏幕,您可以使用“已显示”事件。

激活事件仅在表单获得焦点时触发,但不包含第一次显示。但是,如果之前的活动表单位于您的应用程序之外,则不会引发激活事件。我的意思是只在查看同一项目的表格时才有效。

答案 1 :(得分:0)

这是我的回答,我注意到只有Form有Activated事件,其他控件没有,一旦Form的TopLevel设置为false,我认为它被视为普通控件,在这种情况下,Activate()方法将不执行任何操作,并且在任何情况下都不会引发Activated事件。我认为这就是为什么不激活Activated的原因。

感谢Kuzgun提出使用Shown的建议,但这重点是解释为什么不激活Activated!

这个答案只是我的猜测,即使是关于Form.Activated事件的MSDN页面也没有提到这一点。不应该错过这种方式,特别是在官方文档页面中。

答案 2 :(得分:0)

TopLevel的{​​{1}}属性设置为Form之后,该表单将成为常规控件,因此不会触发false事件。