0

我不明白为什么会这样,我认为在显示表单时应该提出 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。

增加它的额外工作是什么?

4

3 回答 3

2

如果第二种形式是第一次出现在屏幕上,您可以使用 Shown 事件。

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

于 2013-04-25T14:44:52.013 回答
0

这是我的回答,我注意到只有 Form 有 Activated 事件,其他控件没有,一旦 Form 的 TopLevel 设置为 false,我认为它被视为普通控件,在这种情况下,Activate() 方法就可以了在任何情况下都不会引发任何和 Activated 事件。我认为这就是为什么没有提出 Activated 的原因。

感谢 Kuzgun 提出使用 Shown 的建议,但这主要是解释为什么没有提出 Activated!

这个答案只是我的猜测,甚至关于 Form.Activated 事件的 MSDN 页面也没有提到这一点。不应以这种方式错过它,尤其是在官方文档页面中。

于 2013-04-25T15:13:54.700 回答
0

一旦将 的TopLevel属性Form设置为,false则表单将成为普通控件,因此Activated()不会触发事件。

于 2020-06-01T14:04:34.423 回答