12

我有一个带有 2 ToolStripStatusLabels 后跟ToolStripProgressBar. 我希望进度条始终锚定在状态栏的右侧- 所以当窗口调整大小/最大化时,它应该自动移动/重绘。

我认为这就像将第一个(左对齐)ToolStripStatusLabelSpring属性设置为 true 一样简单,所以当表单被调整大小/增加大小并且有更多可用空间时,第一个ToolStripStatusLabel会填满该空间并自动推送ToolStripProgressBar向右。

但这不仅没有达到我想要的效果——第一个ToolStripStatusLabel实际上覆盖了第二个StatusLabel和第二个ProgressBar,基本上占据了整个状态栏。ToolStrip 控件都没有 Anchor 甚至 MinSize。

那么我该怎么做:

  1. 定位ToolStripProgressBar到 StatusBar(StatusStrip) 的右侧
  2. 将一些固定大小的项目(例如ToolStripStatusLabel2and )与一个在有额外空间时增长ToolStripProgressBar的可变大小的项目混合在一起?ToolStripStatusLabel1

提前感谢您的时间和帮助!

~我

4

4 回答 4

17

有一个简单的解决方案。制作一个假的 ToolStripStatusLabel,清空 .Text 并设置 .Spring = true;

之后,添加您的 ToolStripProgressBar。确保顺序首先是标签,然后是进度条。

于 2011-03-17T04:24:57.940 回答
11
  1. 将 StatusStrip、LayoutStyle 属性设置为 Horizo​​ntalStackWithOverflow。
  2. 将控件对齐设置为右,以使控件向右。
于 2018-10-21T16:01:22.413 回答
5

首先将 AutoSize 更改为 false

toolStripProgressBar.AutoSize = false;

然后订阅 statusStrip 的 size changed 事件

statusStrip1.SizeChanged += statusStrip1_SizeChanged;

最后在事件处理程序中更改栏的宽度

private void statusStrip1_SizeChanged(object sender, EventArgs e)
{
   toolStripProgressBar.Width = statusStrip1.Width - 95;
}
于 2013-04-08T08:09:00.290 回答
4

对于所有可能感兴趣的人.. Anchor 属性可用,尽管仅在代码中(不在设计器中)...但无论如何,它不起作用.. 我在 Connect 中留下了一个错误,并得到了带有消息的通用 WillNotFix似乎表明他们只会考虑进行重大修订。

出于某种原因,“Spring”属性似乎不稳定。在我的超简单示例中,它正在工作,但在我做一些自定义绘画的其他一些示例中(但在 MDIPArent 中的子窗体中,后者具有 ht eStatusBar)它不是。在这些情况下,仍然有一个简单的解决方法 - 在 MDIParent 表单(具有状态栏)的 ReSize 事件中,更改 StatusLabel 的大小以使其在与宽度更改相同的比例中变大,因此它会推动 ProgressBar到状态栏的右边缘

于 2009-10-26T20:31:06.870 回答