【问题标题】:Can I show the ToolStrip of a child Form in the MDIParent Form?我可以在 MDIParent 表单中显示子表单的 ToolStrip 吗?
【发布时间】:2020-05-02 17:27:26
【问题描述】:

我有一个 MDI 表单,我想将子表单的 ToolStrip 与父 MDI 表单合并/添加。

通常,子窗体的 ToolStrip 仅显示在所有者子窗体内,但我想将它与 MdiParent 合并。

我可以用 MenuStrip 做到这一点,但几乎找不到 ToolStrip 做同样的事情。

【问题讨论】:

    标签: c# winforms mdi toolstrip


    【解决方案1】:

    ToolStripManager.Merge() 方法可用于合并 MdiParent 的 ToolStrip 和子 Form 的 ToolStrip。子窗体的 ToolStrip 将被移动到 MdiParent 的 ToolStrip。

    ToolStripManager.RevertMerge() 方法会在子 Form 关闭时移除子 Form 的 ToolStrip。

    当然,请使用您分配给 MdiParent ToolStrip(此处为 MdiToolStrip)和子 Form ToolStrip(此处为 toolStrip1)的真实名称,并根据您使用的内容调整 Forms 名称。

    为子窗体 ToolStrip 控件分配不同的名称。

    当你创建一个子 Form 实例时,在显示它之前添加它:

    var child1 = new ChildForm1();
    child1.MdiParent = this;
    ToolStripManager.Merge(child1.toolStrip1, this.MdiToolStrip);
    child1.toolStrip1.Visible = false;
    child1.FormClosed += (s, ev) => { ToolStripManager.RevertMerge(this.MdiToolStrip, child1.toolStrip1); };
    child1.Show();
    

    如果您在 MdiParent 和您的子窗体中有 MenuStrip,ToolStripMenusItems 将自动合并,但我建议您在 MdiParent 构造函数中的 InitializeComponent() 之后添加它:

    this.MainMenuStrip = MdiMenuStrip;
    

    其中 MdiMenuStrip 是分配给 MdiParent 的 MenuStrip 的名称。

    这里解释原因:
    How to avoid screen bouncing when adding a new MDI Child Window

    进一步阅读(MSDN 文档):

    How to: Set Up Automatic Menu Merging for MDI Applications
    Merging Menu Items in the Windows Forms MenuStrip Control

    【讨论】:

    • childForm.Activated += (s, ev) => { ToolStrip ts = (ToolStrip)childForm.Controls.Find("toolstrip1", true).FirstOrDefault(); ToolStripManager.Merge(ts, toolStrip); }; childForm.Deactivate += (s, ev) => { ToolStrip ts = (ToolStrip)childForm.Controls.Find("toolstrip1", true).FirstOrDefault(); ToolStripManager.RevertMerge(this.toolStrip, ts); };这工作感谢@Jimi
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多