【发布时间】:2020-05-02 17:27:26
【问题描述】:
我有一个 MDI 表单,我想将子表单的 ToolStrip 与父 MDI 表单合并/添加。
通常,子窗体的 ToolStrip 仅显示在所有者子窗体内,但我想将它与 MdiParent 合并。
我可以用 MenuStrip 做到这一点,但几乎找不到 ToolStrip 做同样的事情。
【问题讨论】:
我有一个 MDI 表单,我想将子表单的 ToolStrip 与父 MDI 表单合并/添加。
通常,子窗体的 ToolStrip 仅显示在所有者子窗体内,但我想将它与 MdiParent 合并。
我可以用 MenuStrip 做到这一点,但几乎找不到 ToolStrip 做同样的事情。
【问题讨论】:
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
【讨论】: