将窗体设置为父抛出exception“无法将顶级控件添加到控件”

我想从另一个表单访问表单的变量。 单击我的主窗体中的按钮,我想将我的主窗体设置为父窗口,然后调出另一个窗体(子窗体),其中我将访问主窗体的变量。 我的点击处理程序如下:

private void btnSystem_Click(object sender, EventArgs e) { Form_EnterPassword EP = new Form_EnterPassword(); EP.Parent = this; //error: Top-level control cannot be added to a control EP.ShowDialog(); } 

它编译好没有任何错误。 但是,当我运行Main窗体并单击System按钮时,它会抛出exception。 我使用相同的按钮单击在另一个代码(不是我的)中执行类似的操作,并且不会遇到任何错误(仅将主窗体设置为父窗口)。

我究竟做错了什么? 我的主代码中是否有导致此问题的内容?

最好的方法是使用EP.ShowDialog(this) ,然后使用Owner属性。

您需要将EP.TopLevel属性设置为false。 它将允许您为其设置父级。

进一步阅读。

如果您只想访问另一个表单的变量和控件,那么也许您可以通过其他方式访问它,而不是通过父关系。

好吧,显然这样做的方法是打电话

 Form_Child.ShowDialog(this) 

然后我可以打电话

 FromParent_aVariable = ((Form_Parent)this.Owner).aVariable; 

或者如果我在命名空间属性中定义aVariable则

 FromParent_aVariable = NameSpace.Properties.Settings.Default.aVariable; 

有两种方法。

 Form_EnterPassword EP = new Form_EnterPassword(); EP.MdiParent = this; EP.Show(); 

试试这种方式,对我有帮助。 您需要在表单属性中将principalform设置为isMdicontainer = true

以这种方式编写,使对话框显示在父窗体的中心。

  Form_Child.StartPosition = FormStartPosition.CenterParent; Form_Child.ShowDialog(this);