在向Form1添加控件时,Form(?)会短暂出现在Form1之外

时间:2012-10-31 16:59:21

标签: c# .net winforms

我有一个程序可以使用Control创建新的Form s(实际上是TopLevel = false)并将它们放在PanelForm1 }。

出于某种原因,通常会出现Form似乎Form1出现在Form1 之外的。很难确切地说出发生了什么,因为它非常简短。也许是Form移动(并改变其大小)然后返回。或者也许Form1出现在Form1那里(虽然怎么会发生呢?它出自MyPanel.Controls.Add(newForm);!)。

我在代码中找不到可能导致它的任何内容,整个代码太长了,无法在此处发布。 (相关代码很简单:{{1}}。)

是否有可能导致此问题的已知错误?

2 个答案:

答案 0 :(得分:1)

我可以猜测代码是什么样的。使用TopLevel = false将Form添加到Controls集合的问题是您必须明确地使其可见。这是一个奇怪的怪癖(又名bug),通常当你将它添加到Controls集合时,控件会自动变为可见。

所以它可能看起来像这样:

var newform = new Form1();
newform.Visible = true;    // or newform.Show()
newform.TopLevel = false;
MyPanel.Controls.Add(newForm);

是的,如果您执行其他导致消息发送的其他内容,那么它可以在非常短的时间内显示,仍然可以作为顶级窗口。通过交换Visible和TopLevel属性赋值来修复它。

如果这没有用,请发布一个代码段。

答案 1 :(得分:0)

因此,您尝试将表单添加到表单的控件集合中,并收到异常,告知您无法添加顶级控件。要修复"它,您将该窗体的TopLevel属性设置为false。

这不正确。

使用面板(or one of its derivatives)代替。