首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改动态添加ToolStripPanel的ToolStripItems溢出行为

更改动态添加ToolStripPanel的ToolStripItems溢出行为
EN

Stack Overflow用户
提问于 2009-03-03 00:56:57
回答 2查看 2.1K关注 0票数 2

我有一个Windows,可以动态地向它添加新的ToolStrips。每个ToolStrip都有我动态添加到其中的ToolStripItems (主要是ToolStripButtons)。

只要您能在每个ToolStrips中看到所有的ToolStripItems,我就想让所有的ToolStrip都放在一行上。如果向一个ToolStripItem添加一个新的ToolStrip会导致溢出,我希望行尾的ToolStrip跳到一个新的行。我唯一希望看到溢出按钮的情况是,如果ToolStrip有这么多项,以致它们无法适应表单的宽度。

我希望这是默认行为,除非用户手动移动ToolStrip。如果用户移动ToolStrip,那么我希望出现现有的溢出(例如,带有下拉选项的溢出按钮)行为。如果用户自己定位工具栏,我假设用户可以接受这种默认的Winforms溢出行为。

如果在用户重新定位东西之后添加了一个新的动态工具栏,我希望将新工具栏添加到底部行的最后一个ToolStrip的右边。此工具栏应具有更新的溢出行为(例如,在用户手动重新定位之前,请使用新行(如果无法适应)。

我做了一些研究,但没有取得很大的成功:

  • 这似乎应该是一个简单的事情,改变一个ToolStripLayoutStyle,但这似乎不是事实。(在给定行的所有ToolStrips上显示溢出按钮时,最多都会创建新行)。
  • MSDN的文章“如何:管理Windows中的ToolStrip溢出(http://msdn.microsoft.com/en-us/library/2z69s2kh(VS.80%29.aspx))”似乎只涵盖溢出按钮发生时的情况。
  • LayoutCompleted上有一个ToolStrip事件,它似乎可以用来调整事情,看起来应该有一个更简单的方法。
  • 对于这一点,创建自定义LayoutEngine似乎有点过分了,因为内置的一个非常接近我想要做的事情。

我错过了一个简单的解决方案吗?

更新:仍在寻找一个好的解决方案。看来LayoutCompleted路线是可能的。然而,它的问题是它被多次调用。有一次,它说ToolStripItem在溢出区域,紧接着是在主区域,所以只检查一次是否处于溢出状态似乎不安全。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-04 15:30:35

最后,我不认为有一个好的简单的解决办法。这个帖子明确表示,ToolStrips并不是作为一个优先事项为动态场景而设计的。

一种独特的方法是将ToolStrip的MinimumSize设置为所有按钮的大小。正如我所描述的,这将开始在溢出的情况下工作,但即使这样,边缘情况也有问题。

我发现的最佳方法是尽一切可能预先了解工具栏的大小,然后使用加入方法将其放置在加入上。如果您提前进行合理的猜测,那么稍后添加更多的按钮可能是可以的,因为它们最终会出现在溢出区域。

票数 0
EN

Stack Overflow用户

发布于 2009-04-12 02:59:03

1)将项目添加到工具条中

2)将工具条的宽度与最后一行留下的空间大小进行比较。ToolStripPanel有一个Rows[]属性,它将告诉您最后一行是什么,以及该行上有哪些工具条。将它们的宽度相加,并从面板的宽度中减去它们。

3)使用Join方法将新的工具条添加到面板中,指定最后一行(如果合适)或更高一行(如果不是)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/604713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档