我有一个 Windows 窗体 ToolStripPanel,我会动态地向它添加新的 ToolStrips。每个 ToolStrip 都有我动态添加到其中的 ToolStripItems(主要是 ToolStripButtons)。
只要您可以看到每个 ToolStrip 中的所有 ToolStripItem,我希望所有 ToolStrip 都放在一行上。如果将新 ToolStripItem 添加到 ToolStrip 导致发生溢出,我希望行尾的 ToolStrip 跳到新行。我唯一希望看到溢出按钮的情况是 ToolStrip 有太多项目以致无法适应表单的宽度。
我希望这是默认行为,除非用户手动移动 ToolStrip。如果用户移动 ToolStrip,那么我希望发生现有的溢出(例如,带有下拉选项的溢出按钮)行为。如果用户自己定位工具栏,我假设用户会接受这种默认的 Winforms 溢出行为。
如果在用户重新定位事物后添加了新的动态工具栏,我希望将新工具栏添加到底行最后一个 ToolStrip 的右侧。在用户手动重新定位它之前,该工具栏应该具有更新的溢出行为(例如,如果无法容纳,则使用新行)。
我做了一些研究但没有取得很大成功:
- 这似乎应该是更改ToolStripLayoutStyle的简单问题,但事实并非如此。(充其量,当溢出按钮显示在给定行中的所有工具条上时,会创建新行)。
- MSDN 文章“如何:在 Windows 窗体中管理 ToolStrip 溢出”似乎仅涵盖溢出按钮是否/何时发生。
- ToolStrip 上有一个LayoutCompleted事件,似乎可以用来调整东西,似乎应该有一个更简单的方法。
- 创建自定义 LayoutEngine似乎有点过头了,因为内置的 LayoutEngine 非常接近我想要做的。
我错过了一个简单的解决方案吗?
更新:仍在寻找一个好的解决方案。似乎 LayoutCompleted 路线是可能的。但它的问题是它被多次调用。有一次它说 ToolStripItem 位于溢出区域,然后立即位于 Main 区域,因此仅检查一次是否溢出似乎并不安全。