将 ToolStripProgressBar 锚定在 StatusBar(StatusStrip)右侧

12

我有一个表单,其中有带有两个 ToolStripStatusLabel 的状态栏,紧随其后是一个 ToolStripProgressBar。我想要 进度条始终锚定在状态栏的右侧 - 因此当窗口被调整大小/最大化时,它应该自动移动/重绘。

我认为这只需要将第一(左对齐)ToolStripStatusLabelSpring 属性设置为 true 即可。因此,当窗体被调整大小/增加大小,并且有更多空间可用时,第一个ToolStripStatusLabel 将填充该空间并自动将 ToolStripProgressBar 推到右侧。

但是,它不仅无法实现我的需求 - 第一个 ToolStripStatusLabel 实际上会 遮盖 两个 StatusLabel 和 ProgressBar,基本上占据了整个状态栏。 ToolStrip 控件中没有 Anchor 或 MinSize。

那么我该如何:

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

感谢您的时间和帮助!

~IM

4个回答

17

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

之后,添加您的ToolStripProgressBar。确保标签先出现,然后是进度条。


12
  1. 将 StatusStrip 的 LayoutStyle 属性设置为 HorizontalStackWithOverflow。
  2. 将你想要在右侧的控件的 Alignment 属性设置为 Right。

1
这个可以运行,但是StatusStrip属性的名称是“LayoutStyle”,而不是“Layout”。 - oldvbguy

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;
}

5

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接