Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 27 oct. 2009 à 20:30
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.
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 27 oct. 2009 à 20:12
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 ...)