MeasureString [Résolu]

cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 2 mars 2005 à 22:47 - Dernière réponse : cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention
- 24 oct. 2009 à 09:03
Je cherche à savoir pourquoi le label2 et le label3 n'affiche pas la même chose dans le petit morceau de code suivant :

Graphics g = label1.CreateGraphics();
string[] words = label1.Text.Split(
new
char[] { ' ' } );

float tot = 0F;



foreach(
string word
in words) tot += g.MeasureString(word, label1.Font).Width;

label2.Text = tot.ToString();
label3.Text = g.MeasureString(
string.Join("", words), label1.Font).Width.ToString();

Merci d'avance aux réponses!

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 3 mars 2005 à 09:15
3
Merci
Bon, après un bon moment de recherche, j'ai trouvé la solution à mon problème.
Je trouve ce résultat très bizarre, alors si de bonne âme voudront bien m'expliquer plus en détails, je suis preneur.


Voici ce qui j'ai trouvé :
En fait, quand on fait un MeasureString, la longeur du mot est en fait la longueur du mot plus un espace (je ne sais pas pourquoi!).
Donc forcément, si je calcul la longeur du mot "SalutToutLeMonde" ou bien si j'aditionne les longeurs de "Salut" et "Tout" et "Le" et "Monde" et bien j'obtiens pas le même résutat, puisque dans le second cas, j'aurai compter plus de fois l'espace.
Combien de fois plus? Dans l'exemple ci-dessus, j'ai un espace pour "SalutToutLeMonde" et et quatre espace dans l'autre cas, car il y a quatre mot. J'ai trois espaces de trop, ou encore le nombre de mot - 1.


Si je veux corriger mon code pour qu'il marche, je dois donc faire qqch dans ce genre :


Graphics g = label1.CreateGraphics();
float tot = 0F;
float spaceW = g.MeasureString(" ", this.Font).Width; // Longeur d'un espace
string[] words = label1.Text.Split(new char[] { ' ' });


foreach(string word in words) tot += g.MeasureString(word, label1.Font).Width;
tot -= spaceW * (words.Length - 1); // On soustrait les espaces superflus


label2.Text = tot.ToString();
label3.Text = g.MeasureString(string.Join("", words), label1.Font).Width.ToString();


Voilà.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 4 mars 2005 à 21:39
3
Merci
Regarde cet article : http://codeproject.com/useritems/ArticleFour.asp
Je pense qu'il explique "l'espace supplementaire" :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 4 mars 2005 à 23:18
0
Merci
Ha oui je vois, merci, je le lirai encore une deuxième fois demain, là c'est un peu tard, j'ai pas tout saisi ;-)

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Commenter la réponse de cs_Bidou
soussous78 47 Messages postés mardi 21 novembre 2006Date d'inscription 5 novembre 2016 Dernière intervention - 24 oct. 2009 à 00:56
0
Merci
Bonjour,
J'ai exactement le même problème mais le lien ne fonctionne pas.
Pour ma part je crée un style de TextBox spécial et je voudrai juste ajouter le | en fin de ligne mais
1- plus j'écris plus il s'éloigne (le rendu de width est trop grand)
2- lorsque je fais un espace, il ne le prend pas en compte.
3- lorsque je colle le texte a droite de la box, j'ai un espace (toujours a cause du rendu de width)

Si quelqu'un a la réponse là dessus, je suis entièrement preneur.

Merci,
Commenter la réponse de soussous78
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 24 oct. 2009 à 09:03
0
Merci
Bonjour,

Concernant le lien si je ne me trompe pas il s'agissait de cet article :
Article Four: Building a UI Platform in C# - Painting Text to the Pixel : http://www.codeproject.com/KB/GDI-plus/articlefour.aspx


/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

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.