OVH Cloud OVH Cloud

Text dans le titre d'un onglet d'un tabcontrol trop grand...

3 réponses
Avatar
Bull
Bonjour,

Je voudrais savoir comment faire pour, lorsque le titre d'un onglet de mon
tabcontrol est trop grand, que le titre est des "..." à fin comme cela est
fait automatiquement avec les champs textbox par ex.

Merci
Bull

3 réponses

Avatar
Bismark Prods
C'est un calcul qu'il faut faire avec MeasureString ... et dès que le texte
dépasse une certaine longueur, on remplace le texte - 3 caractères par
xxx...


"Bull" a écrit dans le message de
news:
Bonjour,

Je voudrais savoir comment faire pour, lorsque le titre d'un onglet de mon
tabcontrol est trop grand, que le titre est des "..." à fin comme cela est
fait automatiquement avec les champs textbox par ex.

Merci
Bull




Avatar
Bull
Merci beaucoup !

Je ne sais pas si j'ai codé proprement (étant donné que je veux faire cette
opération non pas dans une sub du type Mybase.paint mais dans une sub sans
handle), mais au final, ça fonctionne !

Merci :)
Bull

"Bismark Prods" <xanaia#nospam#@urbanet.ch> a écrit dans le message de news:
%
C'est un calcul qu'il faut faire avec MeasureString ... et dès que le
texte
dépasse une certaine longueur, on remplace le texte - 3 caractères par
xxx...


"Bull" a écrit dans le message de
news:
Bonjour,

Je voudrais savoir comment faire pour, lorsque le titre d'un onglet de
mon
tabcontrol est trop grand, que le titre est des "..." à fin comme cela
est
fait automatiquement avec les champs textbox par ex.

Merci
Bull








Avatar
Bull
En fait, j'ai constaté un problème avec ma méthode.

Voila, j'ai fait la sub suivante :

Private Sub updateSizeOnglets()

'on calcule la largeur idéale des onglets pour que tout tienne sur une ligne

Dim largeur As Integer

largeur = ((Me.Width + 20) / Me.onglets.TabCount) - Me.onglets.Padding.X

If largeur < 100 Then

'on redimensionne les onglets à cette largeur

onglets.ItemSize = New System.Drawing.Size(largeur, 20)

Else

onglets.ItemSize = New System.Drawing.Size(100, 20)

largeur = 100

End If

Dim g As Graphics = onglets.CreateGraphics()

Dim i As Integer

Dim ongletsFont As Font = onglets.Font

For i = 1 To onglets.TabCount - 1

Dim largeurToutTexte As Integer =
g.MeasureString(onglets.TabPages(i).ToolTipText, ongletsFont).Width

If largeurToutTexte > largeur Then

onglets.TabPages(i).Text = onglets.TabPages(i).ToolTipText.Substring(0,
(largeur / largeurToutTexte) * onglets.TabPages(i).ToolTipText.Length - 3) &
"..."

End If

Next

End Sub


L'objet onglets est mon tabcontrol. Cette fonction est appelée en gros à
chaque fois qu'un tabpage est ajouté ou retiré du tabcontrol. Cette sub
marche bien dans le sens où les "..." sont bien ajoutés à la fin du titre de
l'onglet. Cependant, j'ai remarqué qu'à cause de la ligne suivante de la sub
:
Dim g As Graphics = onglets.CreateGraphics()

Le tabcontrol n'est plus correctement positionné, le bas passe en dessous de
ma status bar (voir la copie d'écran ici :
http://img33.exs.cx/img33/5307/tabcontrol_statusbar.jpg)

Quelqu'un me dire comment faire ?
Merci d'avance,
Bull


"Bismark Prods" <xanaia#nospam#@urbanet.ch> a écrit dans le message de news:
%
C'est un calcul qu'il faut faire avec MeasureString ... et dès que le
texte
dépasse une certaine longueur, on remplace le texte - 3 caractères par
xxx...


"Bull" a écrit dans le message de
news:
Bonjour,

Je voudrais savoir comment faire pour, lorsque le titre d'un onglet de
mon
tabcontrol est trop grand, que le titre est des "..." à fin comme cela
est
fait automatiquement avec les champs textbox par ex.

Merci
Bull