¿Cómo alineo a la derecha los controles en un StatusStrip?


93

Estoy tratando de alinear a la derecha un control en a StatusStrip. ¿Cómo puedo hacer eso?

No veo una propiedad para establecer en los ToolStripItemcontroles que especifique su alineación física en el padre StatusStrip.

¿Cómo consigo que el menú desplegable de mensajes esté alineado a la derecha? http://i.friendfeed.com/ed90b205f64099687db30553daa79d075f280b90


4
Cree un elemento de la barra de herramientas de etiqueta con la propiedad Spring establecida en true. Detalles: dotnetperls.com/statusstrip (PD: Sí, sé que es una vieja pregunta.)
Nick Alexeev

Respuestas:


228

Lo encontré a través de foros de MSDN casi inmediatamente después de la publicación :)

Puede utilizar a ToolStripLabelpara pseudo alinear controles a la derecha estableciendo la Textpropiedad en string.Emptyy estableciendo la Springpropiedad en true. Esto hará que llene todo el espacio disponible y empuje todos los controles a la derecha del ToolStripLabelsuperior.


28
Esto funcionará SOLO si StatusStrip.LayoutStyle == ToolStripLayoutStyle.Table(que es el predeterminado)
AZ.

13
Agradable. Un StatusStripLabel con la primavera aparece a cada lado para centrar el control
McDon

Desearía que hubiera una forma "real" de hacer esto, pero funciona, así que gracias. Me pregunto qué hace la Alignmentpropiedad, porque no hizo nada en mi solicitud.
TheGateKeeper

2
Me pregunto qué hace la propiedad de alineación . No veo ninguna de esas propiedades.
TaW

Esto solo permitirá un elemento después de la etiqueta con "Spring", los otros no aparecerán, use el método @VBobCat en su lugar.
Pablo Carrasco Hernández

14

Para mí, tomó dos simples pasos:

  1. Establecer MyRightIntendedToolStripItem.AlignmentenRight
  2. Establecer MyStatusStrip.LayoutStyleenHorizontalStackWithOverflow

5

Como nota adicional, esto se debe al hecho de que en la API de Win32 una celda tiene un ancho fijo o llena el espacio restante -1

int statwidths[] = {100, -1};

SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths);
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Hi there :)");

Si la memoria no me falla, puede tener solo una celda de relleno (-1) por barra de estado.

También puede agregar una tercera celda en el medio y darle a esto la propiedad de relleno para obtener una barra de estado de apariencia más coherente. Consistente porque Mensajes tiene un recuadro a su izquierda derecha donde lo esperaría. Un poco como el disparo de mspaint que se encuentra en la página de MSDN para StatusBars

Sin embargo, me gusta la aplicación creativa: D


Eso es válido para StatusBars, no para StatusStrips, que son código completamente administrado.
Filip Navara

3

Puede mostrar el Buttonal final del StatusStriputilizando la lógica siguiente.

  1. Agregue un ToolstripLabelalStatusStrip
  2. Establecer texto como string.Empty
  3. Establecer Paddingpara elToolstripLabel

Por ejemplo:

this.toolStripStatusLabel1.Padding = new Padding((int)(this.Size.Width - 75), 0, 0, 0);

agregue una tercera celda del medio y dé a esto la propiedad de relleno No veo ninguna de esas propiedades.
TaW

2

Mantenga una etiqueta de Tooltrip, establezca la propiedad Spring como verdadera y para la etiqueta alinee el texto en BottomLeft


1

Descubrí que puede establecer el diseño de StatusStrip en HorizontalStackWithOverflow. Luego, para cada control en el StatusStrip que desee en el lado derecho, configure el control Alignment a Right.

Me gusta más esto ya que no necesita ningún control adicional o ficticio para alinear.


-2

Encuentro una forma general de establecer la ubicación de un control en StatusStrip. Puede mostrar el botón en cualquier posición del StatusStripmediante los pasos a continuación.

  1. Agregar un ToolstripLabel al StatusStrip
  2. Establezca el texto como una cantidad adecuada de espacio como

    toolStripStatusLabel1.Text = "";

  3. Si el diseño no es lo que desea, vaya al paso 2 para cambiar la cantidad de espacio toolStripStatusLabel1.Text; de lo contrario, se habrá hecho el trabajo.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.