向Form(?)添加控件时,它会在Form1之外短暂显示



我有一个程序,它创建新的Control(实际上是FormTopLevel = 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(或其衍生物之一)。

最新更新