How do I right align controls in a StatusStrip?
Asked Answered
I

8

104

I am trying to right align a control in a StatusStrip. How can I do that?

I don't see a property to set on ToolStripItem controls that specifies their physical alignment on the parent StatusStrip.

How do I get Messages drop down to be right aligned? http://i.friendfeed.com/ed90b205f64099687db30553daa79d075f280b90

Illuminant answered 3/2, 2009 at 23:44 Comment(1)
Make a label toolbar item with Spring property set to true. Details: dotnetperls.com/statusstrip (P.S. Yes, I know that it's an old question.)Ayo
I
255

Found it via MSDN forums almost immediately after posting :)

You can use a ToolStripLabel to pseudo right align controls by setting the Text property to string.Empty and setting the Spring property to true. This will cause it to fill all of the available space and push all the controls to the right of the ToolStripLabel over.

Illuminant answered 3/2, 2009 at 23:47 Comment(5)
This will work ONLY if StatusStrip.LayoutStyle == ToolStripLayoutStyle.Table (which is the default one)Schismatic
Nice. A StatusStripLabel with Spring on either side appears to center the controlsCompendium
I wish there was a "real" way of doing this, but this works so thanks. I wonder what the Alignment property does, because it didn't do anything in my application.Waterscape
I wonder what the Alignment property does I don't see any such property.Tiloine
This will only allow one item after the label with "Spring", the others will not appear, use @VBobCat method instead.Henryk
T
27

For me it took two simple steps:

  1. Set MyRightIntendedToolStripItem.Alignment to Right
  2. Set MyStatusStrip.LayoutStyle to HorizontalStackWithOverflow
Tanga answered 11/9, 2018 at 15:2 Comment(1)
this worked for me but after that I could not resize the control :(Rosalie
S
5

As an added note this is due to the fact that in the Win32 API a cell is either fixed width or fills the remaining space -1

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

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

If memory serves me correctly you can have only one fill cell (-1) per statusbar.

You could also add a third middle cell and give this the fill property to get a more concistent looking StatusBar. Consistent because Messages has an inset to its left right where you'd expect it. A bit like the mspaint shot found on the MSDN page for StatusBars

I like the creative appreach though :D

Sectional answered 4/2, 2009 at 0:3 Comment(1)
That's valid for StatusBars, not for StatusStrips, which are fully managed code.Gemperle
H
4

You can display the Button at the end of the StatusStrip by using the logic below.

  1. Add a ToolstripLabel to the StatusStrip
  2. Set text as string.Empty
  3. Set Padding for the ToolstripLabel

For example:

this.toolStripStatusLabel1.Padding = new Padding((int)(this.Size.Width - 75), 0, 0, 0);
Highstrung answered 16/9, 2014 at 13:22 Comment(1)
add a third middle cell and give this the fill property I don't see any such property.Tiloine
S
2

Keep a Toolstrip label , set Spring property as true and for label align text in BottomLeft

Spenser answered 18/4, 2017 at 14:23 Comment(0)
T
2

I found that you can set the StatusStrip Layout to HorizontalStackWithOverflow. Then, for each control on the StatusStrip that you want on the right side, set the control Alignment to Right.

I like this better since you don't need any extra or dummy controls to align.

Trotskyite answered 21/10, 2018 at 15:57 Comment(0)
G
1

If you set a status strip label control’s Spring property to true, then that label takes up any space not used by other controls in the StatusStrip.

Gasconade answered 29/8, 2020 at 13:8 Comment(1)
This answer is already given. When answering such an old question with a lot of answers, you need to check this before.Ambagious
S
-4

Set the RightToLeft tool strip property to True.

Soapy answered 9/5, 2016 at 17:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.