c# winforms statusstrip grip toolstripstatuslabel

c# - ¿Cómo puedo recuperar el espacio de la "Grip"



winforms statusstrip (4)

Echa un vistazo a esta entrada de blog en MSDN . La pregunta era acerca de cambiar el tamaño del control de tamaño manualmente, y creo que usar el ToolStrip Renderer como se sugiere también podría funcionar para usted.

El problema que tengo hasta ahora es que elimina el color de fondo de una etiqueta de estado en 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 } }

Tengo un StatusStrip con un único ToolStripStatusLabel, Spring = true y un color de fondo para las notificaciones.

El problema es que hay un cuadrado gris feo en el lado derecho de la tira de estado. Después de jugar un rato por un tiempo, me di cuenta de que este es el control de tamaño (que tenía está configurado en SizingGrip = falso, GripStyle = Oculto). Sin embargo, incluso con eso oculto, todavía acapara el espacio. No puedo obtener ningún contenido en la tira de estado que se extienda completamente hacia la derecha.

¿Cómo trabajarías para evitar esto? Nota: no puedo establecer el color de fondo de StatusStrip porque la etiqueta de estado cambia de color y tiene algunos efectos de desvanecimiento.


La propiedad StatusStrip.Padding está descompuesta, devuelve el valor incorrecto para Padding.Right si el control de tamaño está deshabilitado. 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 Left para especificar Right es la solución. No te molestes en enviar este error a Connect, no lo arreglarán.


Si Microsoft no está interesado en solucionarlo, parece que una solución adecuada debería manejar todas las orientaciones y, idealmente, corregir todas las Tiras de estado (consulte mi respuesta a Obtener todos los hijos para obtener 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(); }


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 habilitó el control de tamaño. Cuando estaba desactivado, todo funcionaba bien. La solución fue establecer el margen derecho de la etiqueta derecha en algo diferente a 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.