我不明白为什么会这样,我认为应该在显示表单时引发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,并显示消息“已激活!”。
要让它加注,还有什么额外的工作要做?
答案 0 :(得分:2)
如果第一张表格第一次进入屏幕,您可以使用“已显示”事件。
激活事件仅在表单获得焦点时触发,但不包含第一次显示。但是,如果之前的活动表单位于您的应用程序之外,则不会引发激活事件。我的意思是只在查看同一项目的表格时才有效。
答案 1 :(得分:0)
这是我的回答,我注意到只有Form有Activated事件,其他控件没有,一旦Form的TopLevel设置为false,我认为它被视为普通控件,在这种情况下,Activate()方法将不执行任何操作,并且在任何情况下都不会引发Activated事件。我认为这就是为什么不激活Activated的原因。
感谢Kuzgun提出使用Shown的建议,但这重点是解释为什么不激活Activated!
这个答案只是我的猜测,即使是关于Form.Activated事件的MSDN页面也没有提到这一点。不应该错过这种方式,特别是在官方文档页面中。
答案 2 :(得分:0)
将TopLevel
的{{1}}属性设置为Form
之后,该表单将成为常规控件,因此不会触发false
事件。