我有一个程序可以使用Control
创建新的Form
s(实际上是TopLevel = false
)并将它们放在Panel
上Form1
}。
出于某种原因,通常会出现Form
似乎Form1
出现在Form1
外 之外的。很难确切地说出发生了什么,因为它非常简短。也许是Form
移动(并改变其大小)然后返回。或者也许Form1
出现在Form1
那里(虽然怎么会发生呢?它出自MyPanel.Controls.Add(newForm);
!)。
我在代码中找不到可能导致它的任何内容,整个代码太长了,无法在此处发布。 (相关代码很简单:{{1}}。)
是否有可能导致此问题的已知错误?
答案 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)代替。