我可以在 MDIParent 窗体中显示子窗体的 ToolStrip 吗?

Can I show the ToolStrip of a child Form in the MDIParent Form?

我有一个 MDI 窗体,我想 merge/add 子窗体的 ToolStrip 与父 Mdi 窗体。

通常情况下,子窗体的 ToolStrip 仅显示在所有者子窗体中,但我想将其与 MdiParent 的合并。

我可以用 MenuStrip 做到这一点,但很难找到 ToolStrip 来做同样的事情。

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

ToolStripManager.RevertMerge() 方法将在子窗体关闭时删除子窗体的 ToolStrip。

当然,使用您分配给 MdiParent ToolStrip(这里,MdiToolStrip)和子 Form ToolStrip(这里,命名为 toolStrip1)的真实名称,并根据您的需要调整 Forms 名称正在使用。

为子 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 的名称。

这里解释一下原因:

进一步阅读(MSDN 文档):

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