winforms 我如何从“Grip”中回收空间

wlsrxk51  于 2023-11-21  发布在  其他
关注(0)|答案(5)|浏览(204)

我有一个StatusStrip,它有一个ToolStripStatusLabel,Spring=true和一个通知的背景色。
问题是状态栏的右侧有一个难看的灰色方块。摆弄了一会儿后,我意识到这是大小调整夹点(我设置为SizingGrip=false,GripStyle=Hidden)。然而,即使将其隐藏,它仍然占用空间。我无法让状态栏上的任何内容一直延伸到右侧。
注意我不能只设置StatusStrip的背景色,因为状态标签会改变颜色并有一些褪色效果。

zour9fqk

zour9fqk1#

StatusStrip.Padding属性被borked,如果大小调整夹点被禁用,它将返回错误的Padding.Right值。您可以在表单构造函数中修复它,如下所示:

  1. public Form1() {
  2. InitializeComponent();
  3. statusStrip1.Padding = new Padding(statusStrip1.Padding.Left,
  4. statusStrip1.Padding.Top, statusStrip1.Padding.Left, statusStrip1.Padding.Bottom);
  5. }

字符串
使用Left属性指定Right是修复方法。不要麻烦提交这个bug给Connect,他们不会修复它。

evrscar2

evrscar22#

看一下this blog entry on MSDN,这个问题是关于手动改变大小调整夹点的大小,我认为使用ToolStrip渲染器也可以为你工作。
到目前为止,我遇到的问题是,它删除了StatusStrip中状态标签的背景颜色,所以它还不是一个解决方案,但它是一个开始。

  1. public MyForm()
  2. {
  3. InitializeComponent();
  4. statusStrip1.Renderer = new MyRenderer();
  5. }
  6. private class MyRenderer : ToolStripProfessionalRenderer
  7. {
  8. protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e)
  9. {
  10. // don't draw at all
  11. }
  12. }

字符串

展开查看全部
ohtdti5x

ohtdti5x3#

我有以下问题:当我设置tsslSeparator.Spring = true时,我的右标签在tsslSeparator失去焦点后立即消失。启用大小调整夹点时出现问题。禁用时,一切正常。解决方案是将右标签的右边距设置为不同于0的值。

  1. tsslLogging.Margin = new Padding(0, 3, 2, 2); // this is necessary for right alignment of status bar label

字符串
希望这对某人有帮助。

xkftehaa

xkftehaa4#

如果微软对修复它不感兴趣,似乎一个合适的修复应该处理所有方向,理想情况下修复所有状态条(请参阅我对Get All Children的回答以了解GetAllChildren的定义)

  1. public static StatusStrip FixPadding(this StatusStrip ss) {
  2. if (!ss.SizingGrip) {
  3. var fixpad = ss.Padding;
  4. if (ss.Orientation == Orientation.Horizontal) {
  5. if (ss.RightToLeft == RightToLeft.No)
  6. fixpad.Right = fixpad.Left;
  7. else
  8. fixpad.Left = fixpad.Right;
  9. }
  10. else
  11. fixpad.Bottom = fixpad.Top;
  12. ss.Padding = fixpad;
  13. }
  14. return ss;
  15. }
  16. public static void FixStatusStripPadding(this Form f) {
  17. foreach (var ss in f.GetAllChildren().OfType<StatusStrip>())
  18. ss.FixPadding();
  19. }

字符串

展开查看全部
lb3vh1jj

lb3vh1jj5#

我试过这个:

  1. ssStatus.Padding = Padding.Empty

字符串
对我很有效。

相关问题