2013-04-25 63 views
0

我不明白为什么可能是这样,我认为Activated应该在表单显示时提出。实际上,我的表单将TopLevel设置为false,并将其添加到另一个表单。当主窗体显示时,它也是可见的,我可以与其控件进行交互,但我测试并看到“激活”未被提升。是否有任何情况下表单的激活事件不会引发?

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显示消息“Activated!”。

需要额外的工作来提高它吗?

回答

2

如果第一次进入第二个屏幕,您可以使用Shown事件。

激活事件仅在表单获得焦点时触发,但不包含第一次显示。但是,如果以前的表单处于活动状态之外,则不会触发激活事件。我的意思是仅当查看同一个项目的表单时才有效。

+0

那么这将是一个替代品,但这是否意味着激活不能提高? – 2013-04-25 14:48:00

+0

这意味着“激活”并不意味着你的想法;你想要的是“显示”。 – Servy 2013-04-25 14:55:15

+0

激活是一个事件,我想知道它会在什么情况下被提出,你不觉得这很奇怪吗?或者至少向我解释激活不能在这种情况下提出,发布一些链接...,显示是另一个解决方法,但不适用于(不能取代激活)的所有情况下,如果不是这样,为什么激活确实存在? ?? – 2013-04-25 15:05:34

0

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

感谢Kuzgun提供了使用Shown的建议,但是这主要集中在解释为什么不激活Activated!

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

相关问题