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

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

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

zour9fqk

zour9fqk1#

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是修复方法。不要麻烦提交这个bug给Connect,他们不会修复它。

evrscar2

evrscar22#

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

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

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

字符串

ohtdti5x

ohtdti5x3#

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

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

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

xkftehaa

xkftehaa4#

如果微软对修复它不感兴趣,似乎一个合适的修复应该处理所有方向,理想情况下修复所有状态条(请参阅我对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();
    }

字符串

lb3vh1jj

lb3vh1jj5#

我试过这个:

ssStatus.Padding = Padding.Empty

字符串
对我很有效。

相关问题