我想让面板包含MDI表单。我想将MainWin
放入另一种DesktopApp形式的面板(progPanel
)中。我使用了这个C# Panel As MDI Container
我无法在没有MDI的情况下重新编码MainWin,因为这将需要永远,我将失去一些功能。
Canvas.MainWin canvasForm = new Canvas.MainWin();
MdiClientPanel mdiClientPan = new MdiClientPanel();
canvasForm.MdiParent = mdiClientPan.MdiForm;
progPanel.Controls.Add(mdiClientPan);
public class MdiClientPanel : Panel
{
private Form mdiForm;
private MdiClient ctlClient = new MdiClient();
public MdiClientPanel()
{
base.Controls.Add(this.ctlClient);
}
public Form MdiForm
{
get
{
if (this.mdiForm == null)
{
this.mdiForm = new Form();
//set the hidden ctlClient field which is used to determine if the form is an MDI form
System.Reflection.FieldInfo field = typeof(Form).GetField("ctlClient", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
field.SetValue(this.mdiForm, this.ctlClient);
}
return this.mdiForm;
}
}
}
我在第Form cannot be both an MDI child and MDI parent
行收到错误canvasForm.MdiParent = mdiClientPan.MdiForm;
。我尝试使用DesktopApp.ActiveForm.MdiParent
并将MdiClientPanel
中的表单更改为Canvas.MainWin
,但没有任何效果。有什么建议吗?
答案 0 :(得分:1)
你不能这样做。
错误消息应该足够清楚。应该是the answer到the other question that you linked。
多年来,MDI被认为已经过时了。用户发现它过于混乱,并且在单个容器中统一多个窗口有更好的范例。例如,考虑一个选项卡控件。用户已经熟悉这一点,因为现有的每个浏览器都使用选项卡来显示多个网页。是的,重写应用程序以避免MDI需要时间。但这是你唯一的选择,因为你的想法不会奏效。并且还为用户带来了额外的好处。
老实说,我不确定为什么你首先想要一个面板内的MDI表格。考虑使用浮动工具箱窗口作为替代方案。