Comment redimensionner automatiquement la hauteur d’une étiquette mais pas la largeur

J’ai un Panel que je crée par programme; De plus, j’y ajoute plusieurs composants.

L’un de ces composants est une Label qui contiendra le contenu généré par l’utilisateur.

Je ne sais pas quelle doit être la hauteur de l’étiquette, mais sa largeur est fixe.

Comment puis-je définir la hauteur de sorte qu’il affiche tout le texte, sans changer la largeur?

Utilisez simplement la propriété AutoSize , AutoSize sur True .

Définissez la propriété MaximumSize sur, par exemple, (60, 0) pour qu’elle ne puisse pas croître horizontalement, mais uniquement verticalement.

Utilisez Graphics.MeasureSsortingng :

 public SizeF MeasureSsortingng( ssortingng text, Font font, int width ) 

Le paramètre width spécifie la valeur maximale du composant width de la structure SizeF renvoyée (Width). Si le paramètre width est inférieur à la largeur réelle de la chaîne, le composant Width renvoyé est tronqué en une valeur représentant le nombre maximal de caractères pouvant être compris dans la largeur spécifiée. Pour prendre en charge l’intégralité de la chaîne, le composant Height renvoyé est ajusté à une valeur permettant d’afficher la chaîne avec un retour à la ligne.

En d’autres termes, cette fonction peut calculer la hauteur de votre chaîne en fonction de sa largeur.

Si vous avez une étiquette et que vous souhaitez contrôler l’ajustement vertical, vous pouvez procéder comme suit:

 MyLabel.MaximumSize = new Size(MyLabel.Width, 0) MyLabel.Height = MyLabel.PreferredHeight MyLabel.MaximumSize = new Size(0, 0) 

Ceci est utile par exemple si vous avez une étiquette dans un conteneur qui peut être redimensionnée. Dans ce cas, vous pouvez définir la propriété Anchor afin que l’étiquette soit redimensionnée horizontalement mais pas verticalement. Dans l’événement de redimensionnement, vous pouvez ajuster la hauteur à l’aide de la méthode ci-dessus.

Pour éviter que l’ajustement vertical ne soit interprété comme un nouvel événement de redimensionnement, vous pouvez utiliser un booléen:

 bool _inVerticalFit = false; 

Et dans l’événement de redimensionnement:

 if (_inVerticalFit) return; _inVerticalFit = true; MyLabel.MaximumSize = new Size(MyLabel.Width, 0) MyLabel.Height = MyLabel.PreferredHeight MyLabel.MaximumSize = new Size(0, 0) _inVerticalFit = false;