2009-01-09 3 views
4

Je crée un contrôle personnalisé, dont une partie utilise la classe Graphics pour dessiner du texte dans le formulaire. Actuellement, je suis en utilisant le code suivant pour l'afficher:Comment déterminer la largeur d'une chaîne lors de l'impression?

private float _lineHeight { get { return this.Font.Size + 5; } } 
private void Control_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics g = this.CreateGraphics(); 
    Brush b = new SolidBrush(Colors[7]); 

    g.DrawString("Hello World!", this.Font, b, 0, 2); 
    g.DrawString("This has been a test of the emergency drawing system!", 
     this.Font, b, 0, 2 + _lineHeight); 
} 

J'utilise actuellement les polices FixedWidth, et je voudrais savoir comment la police grande affiche, mais il ne semble pas y avoir propriétés pour ce genre d'informations. Y a-t-il un moyen de l'obtenir? Je le veux afin que je puisse envelopper les lignes correctement lorsqu'il est affiché.

Répondre

11

Oui, vous pouvez utiliser MeasureString de la classe

Graphics Cette méthode renvoie une structure SizeF qui représente la taille, dans les unités spécifiées par la propriété PageUnit, de la chaîne spécifiée par le texte paramètre comme dessiné avec le paramètre de police.

private void MeasureStringMin(PaintEventArgs e) 
{ 

    // Set up string. 
    string measureString = "Measure String"; 
    Font stringFont = new Font("Arial", 16); 

    // Measure string. 
    SizeF stringSize = new SizeF(); 
    stringSize = e.Graphics.MeasureString(measureString, stringFont); 

    // Draw rectangle representing size of string. 
    e.Graphics.DrawRectangle(new Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height); 

    // Draw string to screen. 
    e.Graphics.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0)); 
} 
+0

Ah, dans la classe Graphics ... Bonne idée, je cherchais haut et bas dans la classe de police pour quelque chose. –

Questions connexes