我有一个程序,它创建新的Control
(实际上是Form
和TopLevel = false
),并将它们放在Form1
上的Panel
上。
出于某种原因,这之后通常会出现一个Form
,它看起来非常短暂地出现在Form1
的之外。很难确切地说出发生了什么,因为它太简短了。也许是Form1
移动到那里(并改变其大小),然后返回。或者可能是放在Form1
上的Form
出现在那里(尽管这怎么可能发生?它不在Form1
上!)。
我在代码中找不到任何可能导致它的原因,而且整个代码太长了,无法发布在这里。(相关代码简称为:MyPanel.Controls.Add(newForm);
。)
是否有任何已知的错误可能导致这种情况?
我可以猜出代码的样子。在TopLevel=false的情况下将Form添加到Controls集合的问题在于,必须显式地使其可见。这是一个奇怪的怪癖(又名bug),通常当您将控件添加到控件集合时,控件会自动变为可见。
所以它可能看起来是这样的:
var newform = new Form1();
newform.Visible = true; // or newform.Show()
newform.TopLevel = false;
MyPanel.Controls.Add(newForm);
是的,如果你做了其他事情,导致消息被发送,那么它可以在很短的时间内显示出来,仍然是一个顶级窗口。通过交换Visible和TopLevel特性指定来修复此问题。
如果这没有帮助,那么发布一个代码片段。
因此,您尝试将Form添加到Form的Controls集合,但收到异常,告诉您不能添加顶级控件。要"修复"它,您可以将该Form的TopLevel属性设置为false。
这不是正确的解决方案。
请改用Panel(或其衍生物之一)。