Longueur du texte d'un label [Résolu]

dsigmoun 134 Messages postés jeudi 31 juillet 2008Date d'inscription 15 février 2011 Dernière intervention - 27 oct. 2009 à 18:01 - Dernière réponse : dsigmoun 134 Messages postés jeudi 31 juillet 2008Date d'inscription 15 février 2011 Dernière intervention
- 28 oct. 2009 à 12:48
Bonjour à tous,

J'ai un label qui ne peut contenir qu'une ligne. Il arrive que le texte du label soit plus long que la taille du label.

Je souhaiterai que lorsque la taille du texte dépasse celle du label, que le texte affiché se termine par "..."

Par exemple montext ="J'ai un label qui ne peut contenir qu'une ligne"
Si monlabel ne afficher que "J'ai un label qui ne peut contenir qu'une"

Je voudrai "J'ai un label qui ne peut contenir qu'..."

Merci d'avance pour votre aide
Afficher la suite 

4 réponses

Répondre au sujet
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 27 oct. 2009 à 20:30
+3
Utile
Voici une autre solution (pas top non plus) mais celle-ci permet de mesurer la taille du texte par rapport au label, afin de ne pas avoir à la définir à l'avance:


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize

Dim Text As String = "La phrase longue contenue par le label"
DotString(Text, Label1)

End Sub

Public Sub DotString(ByVal text As String, ByVal label As Label)

Dim tmp As String = text
Dim g As Graphics = Graphics.FromHwnd(Me.Handle)

While g.MeasureString(tmp, Label1.Font).Width > Label1.Size.Width
tmp = tmp.Substring(0, tmp.Length - 1)
End While

If tmp.Length <> text.Length And tmp.Length > 2 Then
tmp = tmp.Substring(0, tmp.Length - 2) & "..."
End If

label.Text = tmp

End Sub

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Mayzz
pattex62 26 Messages postés dimanche 7 décembre 2003Date d'inscription 20 janvier 2013 Dernière intervention - 27 oct. 2009 à 19:49
0
Utile
Réponse

Dans mon exemple, dix caractéres maxi :

Mon_Label.Text = Mon_Label.Text.Substring(0, 10) & " ..."
Commenter la réponse de pattex62
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 27 oct. 2009 à 20:12
0
Utile
Bonjour,

Tu dois bien, sous vb.net, avoir l'(équivalent de textWidth, non ?
Si ou : sers-t-en !

Ce que tu demandes est sous VB6 un véritable jeu d'enfant, y compris sans utiliser TextWidth, en lui substituant un peu d'astuce (une police à espacement fixe, un label "tremplin" avec l même police que le label d'affichage, sa propriété (du tremplin) lui permettant d'ajuster l'affichage - de quelques lettres, par exemple ===>> calcul de l'espace graphique occupé par une lettre ===>> etc...)
Voilà comment ce jeu de trapèze s'exprimerait sous vb6 :
toto = "abcdefghijklmnopqrst"
  Label2.Caption = "abcdef"
  DoEvents
  l = Label2.Width \ 6
  nb = (Label1.Width - (3 * l)) \ l
  'Stop
  Label1.Caption = Left(toto, nb) & "..."


et ce serait (une fois encore, soyons clairs, pour les plus cossards... les autres n'utiliseraient pas 2 labels, mais un seul et utiliseraient TextWidth ...)
Commenter la réponse de jmf0
dsigmoun 134 Messages postés jeudi 31 juillet 2008Date d'inscription 15 février 2011 Dernière intervention - 28 oct. 2009 à 12:48
0
Utile
Merci Mayzz, c'est exactement ce que je recherchai.
Commenter la réponse de dsigmoun

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.