2017-04-25 4 views

Répondre

0

Si votre police est à espacement fixe, juste diviser la largeur de zone de texte par la largeur d'un char comme mesuré par Graphics.MeasureString:

static int GetWidthInChars(int widthInPixels, Font font, Graphics g) 
{ 
    return (int) (widthInPixels/g.MeasureString ("a", font).Width); 
} 
0

je remarquai que la mesure d'un caractère ajoute un peu espace supplémentaire qui représente insuffisamment la largeur réelle d'un caractère.

private int CalculateMaxDescriptionLineLength() 
{ 
    Graphics g = _tb.CreateGraphics(); 
    float twoCharW = g.MeasureString("aa", _tb.Font).Width; 
    float oneCharW = g.MeasureString("a", _tb.Font).Width; 
    return (int)((float)_tb.Width/(twoCharW - oneCharW)); 
} 

Merci Sergey de me mettre sur la bonne voie.

+0

Essayez d'utiliser 'TextRenderer.MeasureText'. Depuis .NET2.0 utilise 'TextRenderer' (GDI) au lieu de' Graphics' (GDI +). Il y a des différences entre eux. –

+0

J'ai essayé d'utiliser TextRenderer mais j'ai remarqué qu'il renvoie une taille et non une tailleF, ce qui signifie que l'erreur d'arrondi est introduite lors de la mesure de la chaîne. Cette erreur est ensuite aggravée sur la largeur de la zone de texte, ce qui donne une réponse moins précise à la question initiale. –