繁体   English   中英

面板中的C#MDI表格

[英]C# MDI Form in Panel

我想使一个面板包含一个MDI表单。 我想将MainWin放入另一种DesktopApp形式的面板( progPanel )中。 我已将此C#面板用作MDI容器

没有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;行上Form cannot be both an MDI child and MDI parent canvasForm.MdiParent = mdiClientPan.MdiForm; 我尝试使用DesktopApp.ActiveForm.MdiParent并将MdiClientPanel Form更改为Canvas.MainWin ,但没有任何效果。 有什么建议么?

你不可以做这个。

错误消息应该已经足够清楚。 因此,应该是您链接的另一个问题 的答案

多年以来,人们一直认为MDI已过时。 用户发现它过于混乱,并且有更好的范例来统一单个容器中的多个窗口。 考虑一个选项卡控件。 用户已经对此很熟悉,因为现有的每个浏览器都使用标签来显示多个网页。

是的,重写应用程序以避免MDI需要花费时间。 但这是您唯一的选择,因为您的想法行不通。 而且给用户带来了额外的好处。

老实说,我不太确定为什么首先要在面板中使用MDI表单。 考虑使用浮动工具箱窗口作为替代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM