我有一个状态栏的表单,其中有ToolStripStatusLabel
个,后跟ToolStripProgressBar
。我希望进度条始终锚定在状态栏的右侧 - 所以当窗口调整大小/最大化时,它应该自动移动 /重绘。
我认为这就像将第一个(左对齐)ToolStripStatusLabel
的{{1}}属性设置为true一样简单,因此当窗体调整大小/增加大小时,会有更多空间可用,第一个Spring
会填满该空格并自动将ToolStripStatusLabel
推到右侧。
但这不仅没有做我想要的事情 - 第一ToolStripProgressBar
实际上掩盖了第二ToolStripStatusLabel
和StatusLabel
,基本上占据了整个状态栏。
ToolStrip控件都没有Anchor甚至MinSize。
所以我该怎么做:
ProgressBar
锚定到StatusBar(StatusStrip)的右侧ToolStripProgressBar
和ToolStripStatusLabel2
)与可变大小的ToolStripProgressBar
混合使用,当有额外空间时,这些项会增长?提前感谢您的时间和帮助!
~IM
答案 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)
答案 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;
}