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

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

4 réponses

Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
27
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.
Messages postés
26
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
20 janvier 2013

Réponse

Dans mon exemple, dix caractéres maxi :

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