Pour un System.Windows.Forms.Label
, existe-t-il un moyen d'ajuster automatiquement la taille de la police de l'étiquette en fonction de la taille de l'étiquette?Taille de police de l'étiquette AutoFit
2
A
Répondre
3
class AutoFontLabel : Label
{
public AutoFontLabel()
: base()
{
this.AutoEllipsis = true;
}
protected override void OnPaddingChanged(EventArgs e)
{
UpdateFontSize();
base.OnPaddingChanged(e);
}
protected override void OnResize(EventArgs e)
{
UpdateFontSize();
base.OnResize(e);
}
private void UpdateFontSize()
{
int textHeight = this.ClientRectangle.Height
- this.Padding.Top - this.Padding.Bottom;
if (textHeight > 0)
{
this.Font = new Font(this.Font.FontFamily,
textHeight, GraphicsUnit.Pixel);
}
}
}
Merci à AMissico qui a mis à jour le contrôle pour gérer le remplissage. Nous pouvons voir comment modifier le Padding et TextAlign sont affectés dans le concepteur.
0
Je pense que vous devez remplacer la méthode de peinture pour résoudre ce problème et peindre sur votre propre texte. Mais vous devrez utiliser la méthode MeasureString de GDI + pour obtenir la taille du texte, donc la routine qui vous indiquera la taille de police correcte fonctionnera par tâtonnement.
+0
Je pensais plutôt à un truc avec label.OnResize + label.Font = quelque chose – serhio
Pourquoi la multiplication supplémentaire avec 1f? Un casting ne sera-t-il pas plus rapide/plus propre? (Ce n'est pas important) – AMissico
Est-ce que cela provoque un redimensionnement d'étiquette supplémentaire parce que vous changez la police dans OnResize? – AMissico
non, j'ai essayé, ne provoque pas une étiquette supplémentaire resieze; La base OnResieze est définie après. – serhio