C# 如何从“回收”中回收空间;握把;

C# 如何从“回收”中回收空间;握把;,c#,winforms,statusstrip,grip,toolstripstatuslabel,C#,Winforms,Statusstrip,Grip,Toolstripstatuslabel,我有一个StatusStrip,带有一个ToolStripStatusLabel,Spring=true和一个通知背景色 问题是在状态条的右侧有一个丑陋的灰色正方形。在摆弄了一段时间后,我意识到这是尺寸夹点(我已经设置为SizingGrip=false,GripStyle=Hidden)。然而,即使它被隐藏起来,它仍然占据着空间。我在状态条上找不到任何内容可以一直延伸到右边 你会如何解决这个问题?注意:我不能只设置StatusStrip的背景色,因为状态标签会改变颜色并有一些褪色效果。看一看。问

我有一个StatusStrip,带有一个ToolStripStatusLabel,Spring=true和一个通知背景色

问题是在状态条的右侧有一个丑陋的灰色正方形。在摆弄了一段时间后,我意识到这是尺寸夹点(我已经设置为SizingGrip=false,GripStyle=Hidden)。然而,即使它被隐藏起来,它仍然占据着空间。我在状态条上找不到任何内容可以一直延伸到右边

你会如何解决这个问题?注意:我不能只设置StatusStrip的背景色,因为状态标签会改变颜色并有一些褪色效果。

看一看。问题是关于手动更改大小调整夹点的大小,我认为使用建议的ToolStrip渲染器也适用于您

到目前为止,我遇到的问题是,它删除了StatusStrip中状态标签上的背景色,因此它还不是一个解决方案,但这只是一个开始

    public MyForm()
    {
        InitializeComponent();
        statusStrip1.Renderer = new MyRenderer();
    }

    private class MyRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e)
        {
            // don't draw at all
        }
    }

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

public Form1() {
  InitializeComponent();
  statusStrip1.Padding = new Padding(statusStrip1.Padding.Left,
    statusStrip1.Padding.Top, statusStrip1.Padding.Left, statusStrip1.Padding.Bottom);
}

使用Left属性指定Right是修复方法。不要麻烦提交此错误以进行连接,他们不会修复它。

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

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

希望这对其他人有所帮助。

如果Microsoft对修复它不感兴趣,那么似乎一个合适的修复程序应该处理所有方向,最好修复所有状态条(有关GetAllChildren的定义,请参阅我对的回答)

公共静态StatusStrip FixPadding(此StatusStrip ss){
如果(!ss.SizingGrip){
var fixpad=ss.Padding;
如果(ss.Orientation==Orientation.Horizontal){
如果(ss.rightoleft==rightoleft.No)
fixpad.Right=fixpad.Left;
其他的
fixpad.Left=fixpad.Right;
}
其他的
fixpad.Bottom=fixpad.Top;
填充=固定垫;
}
返回ss;
}
公共静态void FixStatusStripPadding(此表单f){
foreach(类型()的f.GetAllChildren()中的var ss)
ss.FixPadding();
}
    public static StatusStrip FixPadding(this StatusStrip ss) {
        if (!ss.SizingGrip) {
            var fixpad = ss.Padding;

            if (ss.Orientation == Orientation.Horizontal) {
                if (ss.RightToLeft == RightToLeft.No)
                    fixpad.Right = fixpad.Left;
                else
                    fixpad.Left = fixpad.Right;
            }
            else
                fixpad.Bottom = fixpad.Top;

            ss.Padding = fixpad;
        }

        return ss;
    }

    public static void FixStatusStripPadding(this Form f) {
        foreach (var ss in f.GetAllChildren().OfType<StatusStrip>())
            ss.FixPadding();
    }