J'ai une étiquette sur mon formulaire qui se trouve à droite du formulaire. Cette étiquette charge un texte dynamique.
Parfois, le texte qu'il charge est trop long et le texte franchit la bordure du formulaire, c'est-à-dire qu'une partie du texte est hors du formulaire.
Je veux faire évoluer l'étiquette de droite à gauche au lieu de gauche à droite. Comment puis-je y parvenir?
Mon problème ici était que mon étiquette était dans un panneau, et tout ce que je faisais ne fonctionnait pas.
Ce que j'ai fait était de placer l'étiquette dans un contrôle TableLayoutPanel
et de définir la propriété RightToLeft
de TableLayoutPanel sur True
; cela a fait l'affaire.
J'ai résolu cela en définissant l'étiquette
AutoSize propriété à false,
TextAlign à MiddleRight,
un Ancre à à droite.
Notez que la taille de l'étiquette elle-même n'augmente pas avec le texte, mais vous pouvez la gérer en lui donnant suffisamment de largeur pour s'adapter au contenu. L'effet visuel est le même.
Vous ne pouvez pas la faire "grandir de droite à gauche", mais vous pouvez assigner sa propriété Left
pour qu'elle ne sorte pas du formulaire:
label1.Text = "some dynamic text here...";
if (label1.Right > this.Width)
label1.Left = this.Width - label1.Width;
Si la conception le permet, vous pouvez également doubler sa hauteur afin que le texte s'étende sur deux lignes.
Vous pouvez utiliser le TableLayoutPanel ou un autre contrôle de conteneur compatible, mais en définissant à la place la propriété RightToLeft pour le conteneur défini Dock = "Right" pour l'étiquette
La définition de la propriété RightToLeft ne donne pas toujours les résultats attendus car pour certains formats de chaîne, la chaîne est modifiée en changeant l'ordre des mots.
vous pouvez l'écrire:
public enum Leftorright { left,right}
private Leftorright _LeftToRight = Leftorright.left;
public Leftorright LeftToRight
{
get { return _LeftToRight; }
set { _LeftToRight = value; }
}
protected override void OnTextChanged(EventArgs e)
{
int oldWidth;
oldWidth = this.Width;
base.OnTextChanged(e);
if (LeftToRight == Leftorright.right && this.Width != oldWidth)
{
this.Left = this.Left - this.Width + oldWidth;
}
}
using System.Windows.Forms;
/// <summary>
/// The position of myLabel to the left of the otherControl component when entering
/// text "s".
/// You must set myLabel.AutoSize = true
/// </summary>
/// <param name="s">text</param>
void WriteText(string s)
{
int len = TextRenderer.MeasureText ( s, myLabel.Font ).Width;
myLabel.Left = otherControl.Left - 5 - len;
myLabel.Text = s;
}