2010-06-10 4 views
4

J'ai une application Windows Forms où j'affiche certaines données client dans une étiquette. J'ai défini label.AutoEllipsis = true.
Si le texte est plus long que l'étiquette, il ressemble à ceci:Comment puis-je détecter si un System.Windows.Forms.Label avec AutoEllipsis affiche réellement des ellipses?

Some Text 
Some longe... // label.Text is actually "Some longer Text" 
       // Full text is displayed in a tooltip 

qui est ce que je veux.

Mais maintenant je veux savoir si l'étiquette utilise la fonction AutoEllipsis lors de l'exécution. Comment puis-je obtenir cela?

Solution

Grâce à max. Maintenant, j'ai été capable de créer un contrôle qui essayait d'ajuster le texte entier en une ligne. Si quelqu'un est intéressé, voici le code:

Public Class AutosizeLabel 
    Inherits System.Windows.Forms.Label 

    Public Overrides Property Text() As String 
     Get 
      Return MyBase.Text 
     End Get 
     Set(ByVal value As String) 
      MyBase.Text = value 

      ResetFontToDefault() 
      CheckFontsizeToBig() 
     End Set 
    End Property 

    Public Overrides Property Font() As System.Drawing.Font 
     Get 
      Return MyBase.Font 
     End Get 
     Set(ByVal value As System.Drawing.Font) 
      MyBase.Font = value 

      currentFont = value 

      CheckFontsizeToBig() 
     End Set 
    End Property 


    Private currentFont As Font = Me.Font 
    Private Sub CheckFontsizeToBig() 

     If Me.PreferredWidth > Me.Width AndAlso Me.Font.SizeInPoints > 0.25! Then 
      MyBase.Font = New Font(currentFont.FontFamily, Me.Font.SizeInPoints - 0.25!, currentFont.Style, currentFont.Unit) 
      CheckFontsizeToBig() 
     End If 

    End Sub 

    Private Sub ResetFontToDefault() 
     MyBase.Font = currentFont 
    End Sub 

End Class 

pourrait avoir besoin d'un réglage fin (faire le pas et la valeur minimale configurable avec des propriétés visibles de créateurs) mais il fonctionne assez bien pour le moment.

+0

pourquoi ne pas vérifier cette propriété lors de l'exécution? – Arseny

+0

@Arseny: La propriété est vraie l'étiquette "peut" utiliser des ellipses si le texte est trop grand. Pour un petit texte, rien n'est changé mais la propriété est toujours vraie. –

Répondre

13
private static bool IsShowingEllipsis(Label label) 
{ 
    return label.PreferredWidth > label.Width; 
} 
+3

&& label.AutoEllipsis –

+0

Merci, j'ai mis à jour la question avec un contrôle qui ajuste automatiquement le texte pour tenir dans l'étiquette. @Phil: bon point, aussi! –

1

En fait, votre Lable pourrait être multiligne. Dans ce cas, label.PreferredWidth n'aiderait pas. Mais vous pouvez utiliser:

internal static bool IsElipsisShown(this Label @this) 
    { 
     Size sz = TextRenderer.MeasureText(@this.Text, @this.Font, @this.Size, TextFormatFlags.WordBreak); 
     return (sz.Width > @this.Size.Width || sz.Height > @this.Size.Height); 
    } 
+0

Je suis d'accord, votre code fonctionne parfaitement. Le code max n'a pas fonctionné. –

Questions connexes