Comment obtenir la fonctionnalité de retour à la ligne pour un Label
texte pour qui sort des limites?
184
La réponse rapide: désactivez AutoSize .
Le gros problème ici est que l'étiquette ne changera pas sa hauteur automatiquement (seulement la largeur). Pour ce faire, vous devrez sous-classer l'étiquette et inclure une logique de redimensionnement vertical.
En gros, ce que vous devez faire dans OnPaint est:
Vous devrez également définir l' indicateur de style ResizeRedraw dans le constructeur.
En fait, la réponse acceptée est inutilement compliquée.
Si vous définissez l'étiquette sur AutoSize, elle s'agrandira automatiquement avec le texte que vous y mettez. (Cela inclut la croissance verticale.)
Si vous souhaitez que le mot soit renvoyé à une largeur particulière, vous pouvez définir la propriété MaximumSize.
Testé et fonctionne.
la source
Dock
propriété de l'étiquette et du panneau surTop
, au lieu de ma solution.OnResize
parent et j'ai appelémyLabel.MaximumSize = new Size(Bounds.Width, 0);
Dans mon cas (étiquette sur un panneau) j'ai mis
label.AutoSize = false
etlabel.Dock = Fill
. Et le texte de l'étiquette est automatiquement enveloppé.la source
Il n'y a pas de propriété autowrap, mais cela peut être fait par programme pour le dimensionner dynamiquement. Voici une solution:
Sélectionnez les propriétés de l'étiquette
AutoSize
=True
MaximumSize
= ( Largeur , Hauteur ) où Largeur = taille maximale que vous voulez que l'étiquette soit et Hauteur = combien de pixels vous voulez qu'elle enveloppela source
À partir de MSDN , enveloppez automatiquement le texte dans l'étiquette :
la source
Height = sz.Height + Padding.Vertical;
)Je devais trouver une solution rapide, alors j'ai juste utilisé un TextBox avec ces propriétés:
la source
Ayez un meilleur basé sur la réponse de @hypo
int width = this.Parent == null ? this.Width : this.Parent.Width;
cela vous permet d'utiliser l'étiquette de croissance automatique lorsqu'elle est ancrée à un parent, par exemple un panneau.this.Height = sz.Height + Padding.Bottom + Padding.Top;
ici nous nous occupons du rembourrage pour le haut et le bas.la source
Manipulez le
ClientSizeChanged event
pour le panneau, en faisant que l'étiquette remplisse l'espace:Définir
Auto-Size
pour l'étiquette surtrue
Dock
pour l'étiquette surFill
la source
Je ne suis pas sûr que cela conviendra à tous les cas d'utilisation, mais j'utilise souvent une astuce simple pour obtenir le comportement d'emballage: mettez votre
Label
avec à l'AutoSize=false
intérieur d'un 1x1TableLayoutPanel
qui prendra soin de laLabel
taille du.la source
Définissez la propriété AutoEllipsis sur «TRUE» et la propriété AutoSize sur «FALSE».
la source
Si votre panneau limite la largeur de votre étiquette, vous pouvez définir la propriété Anchor de votre étiquette sur Left, Right et définir AutoSize sur true. Ceci est conceptuellement similaire à l'écoute de l'
SizeChanged
événement du Panel et à la mise à jour de MaximumSize de l'étiquette en anew Size(((Control)sender).Size.Width, 0)
comme suggéré par une réponse précédente . Chaque côté répertorié dans la propriété Anchor est, bien, ancré au côté interne respectif du contrôle conteneur. Ainsi, la liste de deux côtés opposés dans Anchor définit effectivement la dimension du contrôle. L'ancrage à gauche et à droite définit la propriété Width du contrôle et l'ancrage en haut et en bas définit sa propriété Height.Cette solution, comme C #:
la source
Si vous voulez vraiment définir la largeur de l'étiquette indépendamment du contenu, je trouve que le moyen le plus simple est le suivant:
Maintenant, l'étiquette est de largeur constante, mais elle adapte sa hauteur automatiquement.
Ensuite, pour le texte dynamique, diminuez la taille de la police. Si nécessaire, utilisez cet extrait de code dans le sous où le texte de l'étiquette est défini:
la source
Cela m'a aidé dans mon formulaire appelé InpitWindow: In Designer for Label:
Code entier de mon formulaire
la source
Si les dimensions du bouton doivent rester inchangées:
la source
La réponse simple à ce problème consiste à modifier la propriété DOCK de l'étiquette. Il est "AUCUN" par défaut.
la source
la source
Utilisez
style="overflow:Scroll"
dans l'étiquette comme dans le HTML ci-dessous. Cela ajoutera la barre de défilement dans l'étiquette dans le panneau.la source