Как мне вернуть пространство из «Захвата» - PullRequest
16 голосов
/ 15 апреля 2010

У меня есть StatusStrip с одним ToolStripStatusLabel, Spring = true и цветом фона для уведомлений.

Проблема в том, что в правой части строки состояния есть уродливый серый квадрат. Поработав некоторое время, я понял, что это размерный захват (у меня было установлено SizingGrip = false, GripStyle = Hidden). Тем не менее, даже когда он скрыт, он все еще поглощает пространство. Я не могу получить какой-либо контент в полосе состояния, чтобы он доходил до правого края.

Как бы вы обойти это? Примечание. Я не могу просто установить задний цвет StatusStrip, поскольку метка состояния меняет цвета и имеет некоторые эффекты затухания.

Ответы [ 4 ]

27 голосов
/ 15 апреля 2010

Свойство StatusStrip.Padding не работает, оно возвращает неправильное значение для Padding.Right, если захват размера отключен. Вы можете исправить это в конструкторе формы, например так:

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

Исправлено использование свойства Left для указания Right. Не отправляйте эту ошибку в Connect, они не исправят ее.

1 голос
/ 15 апреля 2010

Посмотрите эту запись в блоге на MSDN . Вопрос состоял в том, чтобы вручную изменить размер калибровочной ручки, и я думаю, что использование ToolStrip Renderer, как было предложено, может работать и для вас.

Проблема, с которой я столкнулся на данный момент, заключается в том, что он удаляет цвет фона на метке состояния в StatusStrip, поэтому это еще не решение, но это начало.

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

    private class MyRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e)
        {
            // don't draw at all
        }
    }
0 голосов
/ 17 декабря 2016

Если Microsoft не заинтересована в ее исправлении, похоже, что правильное исправление должно обрабатывать все ориентации и в идеале исправлять все полоски состояния (см. Мой ответ на Получить всех детей для определения 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();
    }
0 голосов
/ 02 июля 2014

У меня была следующая проблема: когда я установил tsslSeparator.Spring = true, моя правая метка исчезла сразу после потери фокуса tsslSeparator.Проблема возникла при включении калибровки.Когда он был отключен, все работало просто отлично.Решение состояло в том, чтобы установить правое поле для правой метки на значение, отличное от 0.

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

Надеюсь, это кому-нибудь поможет.

...