将StatusStripProgressBar锚定到StatusBar的右侧(StatusStrip)

时间:2009-10-13 20:22:34

标签: winforms toolstrip

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

我认为这就像将第一个(左对齐)ToolStripStatusLabel的{​​{1}}属性设置为true一样简单,因此当窗体调整大小/增加大小时,会有更多空间可用,第一个Spring会填满该空格并自动将ToolStripStatusLabel推到右侧。

但这不仅没有做我想要的事情 - 第一ToolStripProgressBar实际上掩盖了第二ToolStripStatusLabelStatusLabel,基本上占据了整个状态栏。 ToolStrip控件都没有Anchor甚至MinSize。

所以我该怎么做:

  1. ProgressBar锚定到StatusBar(StatusStrip)的右侧
  2. 将一些固定大小项目(例如ToolStripProgressBarToolStripStatusLabel2)与可变大小的ToolStripProgressBar混合使用,当有额外空间时,这些项会增长?
  3. 提前感谢您的时间和帮助!

    ~IM

4 个答案:

答案 0 :(得分:14)

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

之后,添加ToolStripProgressBar。确保订单首先是标签,然后是进度条。

答案 1 :(得分:4)

对于所有可能感兴趣的人..锚属性是可用的,虽然只在Code中(不在设计师中)......但无论如何,它都不起作用..我在Connect中留下了一个BUG并获得了通用的WillNotFix消息似乎表明他们只会考虑进行重大修订。

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

答案 2 :(得分:4)

  1. 将StatusStrip的LayoutStyle属性设置为Horizo​​ntalStackWithOverflow。
  2. 将控件的“对齐方式”设置为“右”。

答案 3 :(得分:3)

首先将AutoSize更改为false

toolStripProgressBar.AutoSize = false;

然后订阅statusStrip的大小更改事件

statusStrip1.SizeChanged += statusStrip1_SizeChanged;

最后在事件处理程序

中更改条的宽度
private void statusStrip1_SizeChanged(object sender, EventArgs e)
{
   toolStripProgressBar.Width = statusStrip1.Width - 95;
}