Comment aligner correctement les contrôles dans un StatusStrip?

93

J'essaie d'aligner à droite un contrôle dans un fichier StatusStrip. Comment puis je faire ça?

Je ne vois pas de propriété à définir sur les ToolStripItemcontrôles qui spécifie leur alignement physique sur le parent StatusStrip.

Comment aligner correctement la liste déroulante des messages? http://i.friendfeed.com/ed90b205f64099687db30553daa79d075f280b90

Eric Schoonover
la source
4
Créez un élément de barre d'outils d'étiquette avec la propriété Spring définie sur true. Détails: dotnetperls.com/statusstrip (PS Oui, je sais que c'est une vieille question.)
Nick Alexeev

Réponses:

228

Je l'ai trouvé via les forums MSDN presque immédiatement après la publication :)

Vous pouvez utiliser un ToolStripLabelpseudo contrôle d'alignement à droite en définissant la Textpropriété sur string.Emptyet en définissant la Springpropriété sur true. Cela le fera remplir tout l'espace disponible et poussera toutes les commandes à droite du ToolStripLabeldessus.

Eric Schoonover
la source
28
Cela fonctionnera UNIQUEMENT si StatusStrip.LayoutStyle == ToolStripLayoutStyle.Table(qui est la valeur par défaut)
AZ.
13
Agréable. Un StatusStripLabel avec un ressort de chaque côté semble centrer les contrôles
mcdon
J'aurais aimé qu'il y ait une "vraie" façon de faire cela, mais cela fonctionne donc merci. Je me demande ce que fait la Alignmentpropriété, car elle n'a rien fait dans ma demande.
TheGateKeeper
2
Je me demande ce que fait la propriété Alignment. Je ne vois aucune propriété de ce type.
TaW
Cela n'autorisera qu'un seul élément après l'étiquette avec "Spring", les autres n'apparaîtront pas, utilisez plutôt la méthode @VBobCat.
Pablo Carrasco Hernández le
14

Pour moi, cela a pris deux étapes simples:

  1. Régler MyRightIntendedToolStripItem.AlignmentsurRight
  2. Régler MyStatusStrip.LayoutStylesurHorizontalStackWithOverflow
VBobCat
la source
5

En outre, cela est dû au fait que dans l'API Win32, une cellule a une largeur fixe ou remplit l'espace restant -1

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

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

Si ma mémoire est bonne, vous ne pouvez avoir qu'une seule cellule de remplissage (-1) par barre d'état.

Vous pouvez également ajouter une troisième cellule du milieu et lui donner la propriété fill pour obtenir une barre d'état plus cohérente. Cohérent car Messages a un encart à sa gauche à droite où vous vous attendez. Un peu comme le cliché mspaint trouvé sur la page MSDN pour StatusBars

J'aime bien l'approbation créative: D

Martijn Laarman
la source
C'est valable pour StatusBars, pas pour StatusStrips, qui sont du code entièrement géré.
Filip Navara
3

Vous pouvez afficher le Buttonà la fin de StatusStripen utilisant la logique ci-dessous.

  1. Ajouter un ToolstripLabelà laStatusStrip
  2. Définir le texte comme string.Empty
  3. Set Paddingpour leToolstripLabel

Par exemple:

this.toolStripStatusLabel1.Padding = new Padding((int)(this.Size.Width - 75), 0, 0, 0);
Chandran R
la source
ajoutez une troisième cellule du milieu et donnez-lui la propriété fill. Je ne vois aucune propriété de ce type.
TaW
2

Conservez une étiquette Toolstrip, définissez la propriété Spring sur true et pour le texte d'alignement d'étiquette dans BottomLeft

Visakh VA
la source
1

J'ai trouvé que vous pouvez définir la disposition StatusStrip sur HorizontalStackWithOverflow. Ensuite, pour chaque contrôle sur le StatusStrip que vous souhaitez sur le côté droit, définissez l'alignement de contrôle sur Droite.

J'aime mieux cela car vous n'avez besoin d'aucune commande supplémentaire ou factice pour vous aligner.

chevaliergambit
la source
-2

Je trouve un moyen général de définir l'emplacement d'un contrôle dans StatusStrip. Vous pouvez afficher le bouton à n'importe quelle position dans le StatusStripen suivant les étapes ci-dessous.

  1. Ajouter un ToolstripLabel au StatusStrip
  2. Définissez le texte comme une quantité d'espace appropriée comme

    toolStripStatusLabel1.Text = "";

  3. Si la mise en page n'est pas ce que vous voulez, passez à l'étape 2 pour modifier la quantité d'espace toolStripStatusLabel1.Text, sinon le travail a été fait.

Alan Ackart
la source
-2

Définissez la propriété de la bande d'outils RightToLeft sur True.

TravisHendrickson
la source