2010-04-15 1 views
16

У меня есть StatusStrip с единственной ToolStripStatusLabel, Spring = true и цветом фона для уведомлений.Как восстановить пространство из «Grip»

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

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

ответ

26

Свойство 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, чтобы указать право - это исправление. Не беспокойтесь, отправляя эту ошибку в Connect, они не исправят ее.

1

Посмотрите на this blog entry on 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

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

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

Надеется, что это помогает кому-то.

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(); 
    }