0

我有一个程序可以创建新Control的 s (实际上是 - Forms with TopLevel = false)并将它们放在 a Panelwhich is on 上Form1

出于某种原因,这之后通常会出现看起来Form非常短暂的. 很难确切地说出发生了什么,因为它太简短了。也许它正在移动(并改变它的大小)然后返回。或者也许是出现在那里的那个(虽然这怎么可能发生?它已经超出了!)。Form1Form1FormForm1Form1

我在代码中找不到任何可能导致它的内容,并且整个代码太长,无法在此处发布。(相关代码很简单:MyPanel.Controls.Add(newForm);。)

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

4

2 回答 2

1

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

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

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

是的,如果您执行其他导致消息发送的操作,它可以使其在很短的时间内可见,仍然作为顶级窗口。通过交换 Visible 和 TopLevel 属性分配来修复它。

如果这没有帮助,请发布代码片段。

于 2012-10-31T18:06:57.067 回答
0

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

这不是正确的解决方法。

请改用面板(或其派生产品之一)。

于 2012-10-31T17:30:43.287 回答