2010-04-15 12 views
16

Tengo un StatusStrip con una sola ToolStripStatusLabel, Spring = true y un color de fondo para las notificaciones.Cómo recupero el espacio del "Grip"

El problema es que hay un cuadrado gris feo en el lado derecho de la barra de estado. Después de tocar el violín por un tiempo, me di cuenta de que este es el agarre de tamaño (lo tenía configurado en SizingGrip = falso, GripStyle = Oculto). Sin embargo, incluso con eso oculto, todavía acecha el espacio. No puedo obtener ningún contenido en la barra de estado para extender todo el camino hacia la derecha.

¿Cómo solucionarías esto? Tenga en cuenta que no puedo simplemente establecer el color de fondo de StatusStrip porque la etiqueta de estado cambia de color y tiene algunos efectos de desvanecimiento.

Respuesta

26

La propiedad StatusStrip.Padding se borked, devuelve el valor incorrecto para Padding.Right si el control de tamaño está desactivado. Puedes arreglarlo en tu constructor de formularios, así:

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

Usar la propiedad Izquierda para especificar Derecha es la solución. No se moleste en enviar este error a Connect, no lo arreglarán.

1

Eche un vistazo a this blog entry on MSDN. La pregunta era sobre cambiar el tamaño del agarre de tamaño manualmente, y creo que usar el ToolStrip Renderer como se sugiere podría funcionar para usted también.

El problema que tengo hasta ahora es que elimina el color de fondo en una etiqueta de estado en el StatusStrip, por lo que aún no es una solución, pero es un comienzo.

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

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

Tuve el siguiente problema: cuando configuré tsslSeparator.Spring = true, mi etiqueta derecha desapareció inmediatamente después de que tsslSeparator perdiera el foco. El problema apareció cuando se habilitaba el agarre de tamaño. Cuando estaba deshabilitado, todo funcionó bien. La solución fue establecer el margen derecho de la etiqueta derecho a algo diferente de 0.

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

Espero que esto ayude a alguien.

0

Si Microsoft no es interesante en la fijación de ella, parece una solución adecuada debe manejar todas las orientaciones, y lo ideal es fijar todas las tiras de estado (véase mi respuesta a Get All Children para la definición de 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(); 
    } 
Cuestiones relacionadas