【问题标题】:C# MDI Form in Panel面板中的 C# MDI 表单
【发布时间】:2014-08-02 19:48:40
【问题描述】:

我想让一个面板包含一个 MDI 表单。我想将MainWin 放入另一个桌面应用程序形式的面板(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;
            }
        }
    }

我在canvasForm.MdiParent = mdiClientPan.MdiForm; 在线收到错误Form cannot be both an MDI child and MDI parent。我尝试使用DesktopApp.ActiveForm.MdiParent 并将MdiClientPanel 中的Form 更改为Canvas.MainWin,但没有任何效果。有什么建议吗?

【问题讨论】:

    标签: c# panel parent mdi


    【解决方案1】:

    你不能这样做。

    错误信息应该已经足够清楚了。所以应该是the answerthe other question that you linked

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

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

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

    【讨论】:

    • 这就是我所害怕的。重写整个程序可能需要比我更多的时间,这是一个庞大的 cad 程序,我想嵌入到当前程序中。无论如何,谢谢。
    • 是的,程序通常不支持嵌入到其他程序中。 MDI 与否,这几乎是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多