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

IM.*_*IM. 10 toolstrip winforms

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

我认为这就像将1st(左对齐)ToolStripStatusLabelSpring属性设置为true 一样简单,因此当窗体调整大小/增加大小,并且有更多可用空间时,1st ToolStripStatusLabel会填满该空间并自动推送ToolStripProgressBar在右边.

但这不仅没有做我想要的 - 第一个ToolStripStatusLabel实际上覆盖了第二个StatusLabelProgressBar基本占据整个状态栏.ToolStrip控件都没有Anchor甚至MinSize.

那我怎么做:

  1. 锚定在ToolStripProgressBarStatusBar的右侧(StatusStrip)
  2. 将一些固定尺寸的物品(例如ToolStripStatusLabel2ToolStripProgressBar)混合在一起ToolStripStatusLabel1,如果有额外的空间,它会变大吗?

在此先感谢您的时间和帮助!

〜IM

小智 14

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

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


IM.*_*IM. 5

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

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


aar*_*ron 5

首先将 AutoSize 更改为 false

toolStripProgressBar.AutoSize = false;

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

statusStrip1.SizeChanged += statusStrip1_SizeChanged;

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

private void statusStrip1_SizeChanged(object sender, EventArgs e)
{
   toolStripProgressBar.Width = statusStrip1.Width - 95;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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