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

Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
- - Dernière réponse : dsigmoun
Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
- 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

Meilleure réponse
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
16
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Mayzz
Messages postés
26
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
20 janvier 2013
0
Merci
Réponse

Dans mon exemple, dix caractéres maxi :

Mon_Label.Text = Mon_Label.Text.Substring(0, 10) & " ..."
Commenter la réponse de pattex62
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
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
Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
1
0
Merci
Merci Mayzz, c'est exactement ce que je recherchai.
Commenter la réponse de dsigmoun