Como faço para alinhar os controles à direita em um StatusStrip?

93

Estou tentando alinhar corretamente um controle em a StatusStrip. Como eu posso fazer isso?

Não vejo uma propriedade para definir nos ToolStripItemcontroles que especifica seu alinhamento físico no pai StatusStrip.

Como faço para que as mensagens sejam alinhadas à direita? http://i.friendfeed.com/ed90b205f64099687db30553daa79d075f280b90

Eric Schoonover
fonte
4
Faça um item da barra de ferramentas do rótulo com a propriedade Spring definida como true. Detalhes: dotnetperls.com/statusstrip (PS Sim, eu sei que é uma pergunta antiga.)
Nick Alexeev

Respostas:

228

Encontrei nos fóruns do MSDN quase imediatamente após a postagem :)

Você pode usar um ToolStripLabelpara alinhar à direita os controles definindo a Textpropriedade como string.Emptye Springcomo true. Isso fará com que ele preencha todo o espaço disponível e empurre todos os controles para a direita do ToolStripLabelover.

Eric Schoonover
fonte
28
Isso funcionará SOMENTE se StatusStrip.LayoutStyle == ToolStripLayoutStyle.Table(que é o padrão)
AZ.
13
Agradável. Um StatusStripLabel com Spring em cada lado aparece para centralizar os controles
mcdon
Gostaria que houvesse uma maneira "real" de fazer isso, mas funciona, obrigado. Eu me pergunto o que a Alignmentpropriedade faz, porque ela não fez nada em meu aplicativo.
TheGateKeeper de
2
Eu me pergunto o que a propriedade Alignment faz . Não vejo nenhuma propriedade desse tipo.
TaW de
Isso permitirá apenas um item após o rótulo com "Spring", os outros não aparecerão, use o método @VBobCat.
Pablo Carrasco Hernández
14

Para mim, foram necessários dois passos simples:

  1. Definir MyRightIntendedToolStripItem.AlignmentparaRight
  2. Definir MyStatusStrip.LayoutStyleparaHorizontalStackWithOverflow
VBobCat
fonte
5

Como observação adicional, isso se deve ao fato de que na API do Win32 uma célula tem largura fixa ou preenche o espaço restante -1

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

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

Se a memória não me falha, você pode ter apenas uma célula de preenchimento (-1) por barra de status.

Você também pode adicionar uma terceira célula do meio e dar a ela a propriedade fill para obter uma barra de status de aparência mais consistente. Consistente porque o Mensagens tem uma inserção à direita, onde você esperava. Um pouco como a foto do mspaint encontrada na página do MSDN para StatusBars

Eu gosto da avaliação do criativo: D

Martijn Laarman
fonte
Isso é válido para StatusBars, não para StatusStrips, que são códigos totalmente gerenciados.
Filip Navara
3

Você pode exibir o Buttonno final de StatusStripusando a lógica abaixo.

  1. Adicione um ToolstripLabelaoStatusStrip
  2. Definir texto como string.Empty
  3. Definido Paddingpara oToolstripLabel

Por exemplo:

this.toolStripStatusLabel1.Padding = new Padding((int)(this.Size.Width - 75), 0, 0, 0);
Chandran R
fonte
adicione uma terceira célula do meio e dê a ela a propriedade fill . Não vejo nenhuma propriedade desse tipo.
TaW de
2

Mantenha um rótulo de Toolstrip, defina a propriedade Spring como true e alinhe o texto do rótulo em BottomLeft

Visakh VA
fonte
1

Descobri que você pode definir o Layout de StatusStrip como HorizontalStackWithOverflow. Em seguida, para cada controle no StatusStrip que você deseja no lado direito, defina o Alinhamento de controle como Direito.

Eu gosto mais disso, pois você não precisa de nenhum controle extra ou fictício para alinhar.

knightgambit
fonte
-2

Encontro uma maneira geral de definir a localização de um controle em StatusStrip. Você pode exibir o botão em qualquer posição no StatusStripusando as etapas abaixo.

  1. Adicione um ToolstripLabel ao StatusStrip
  2. Defina o texto como uma quantidade adequada de espaço, como

    toolStripStatusLabel1.Text = "";

  3. Se o layout não for o que você deseja, vá para a etapa 2 para alterar a quantidade de espaço toolStripStatusLabel1.Text, caso contrário, o trabalho foi feito.

Alan Ackart
fonte
-2

Defina a propriedade de faixa da ferramenta RightToLeft como True.

TravisHendrickson
fonte