18

我有一个带有单个 ToolStripStatusLabel、Spring=true 和通知背景颜色的 StatusStrip。

问题是状态条右侧有一个丑陋的灰色方块。摆弄了一段时间后,我意识到这是尺寸控制(我设置为 SizingGrip=false,GripStyle=Hidden)。然而,即使它隐藏起来,它仍然占据空间。我无法让状态条上的任何内容一直向右延伸。

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

4

4 回答 4

29

StatusStrip.Padding 属性是 borked,如果尺寸控制被禁用,它会返回错误的 Padding.Right 值。您可以在表单构造函数中修复它,如下所示:

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

使用 Left 属性指定 Right 是解决方法。不要费心将此错误提交给 Connect,他们不会修复它。

于 2010-04-15T17:16:23.470 回答
1

Have a look at this blog entry on MSDN. The question was about changing the size of the sizing grip manually, and I think using the ToolStrip Renderer as suggested could work for you also.

The problem I have so far, is that it removes the background color on a status label in the StatusStrip, so it's not a solution yet, but it's a start.

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

    private class MyRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e)
        {
            // don't draw at all
        }
    }
于 2010-04-15T15:38:41.740 回答
0

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

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

希望这可以帮助某人。

于 2014-07-02T16:34:35.347 回答
0

如果 Microsoft 对修复它不感兴趣,那么似乎正确的修复应该处理所有方向,并理想地修复所有状态条(请参阅我对Get All Children的回答以获得GetAllChildren 的定义)

    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();
    }
于 2016-12-17T00:44:56.743 回答