我正在创建一个带有一个MDI窗体的C#. Net 4.8 Winform应用程序。这个MDI窗体有几个面板和一个拆分容器。
添加子窗体时,我使用以下代码:
frm.Text = formTitleText;
frm.MdiParent = this;
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
panelDeskTop.Controls.Add(frm);
panelDeskTop.Tag = frm;
frm.BringToFront();
lblTitleChildForm.Text = $"{frm.Text}({this.MdiChildren.Length})";
frm.Show();
窗体显示在面板中,但不作为MDI子级添加。父级(This)是MDI父级,并具有IsMDIContainer属性。因此,this. MdiChildren. Length始终为0。
不知道为什么?
先谢了。
1条答案
按热度按时间unftdfkk1#
它是预期的。您已为其设置了另一个父级:
panelDeskTop.Controls.Add(frm);
.请考虑以下几点:
MdiClient
类型的控件。当设置窗体的MdiParent
时,基本上是将其添加到MdiClient控件的controls集合中。MdiChildren
时,它将返回MdiClient的子窗体。现在我相信,事情更清楚了:
最后一行,从父对象的MdiChildren中删除表单,这就是数组为空的原因。
看起来你不需要MDI。如果子窗体要填充主面板而不显示标题栏,那么基本上意味着它不需要MDI父窗体。只需将它设置为非顶层,并将其添加到主面板的控件集合中并显示它。
如果你想为MDI父级提供一个可调整大小的侧边栏,那么将面板和拆分器停靠在父级的左侧就足够了,然后右侧将被MdiClient占据。