Подтвердить что ты не робот

Как я могу вернуть пространство из "Grip"

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

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

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

4b9b3361

Ответ 1

Свойство 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, они не исправят ее.

Ответ 2

Посмотрите эту запись в блоге в 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
        }
    }

Ответ 3

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

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

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

Ответ 4

Если 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();
    }