web-dev-qa-db-fra.com

Frontière dans le drawrectangle

Eh bien, je codifie l'événement ONPAINT pour mon propre contrôle et c'est très convaincant pour moi de le rendre précis de pixel.

J'ai un petit problème avec les frontières de rectangles.

Voir l'image:

Supprimé Images morts Link

Ces deux rectangles ont été dessinés avec les mêmes paramètres de localisation et de même taille, mais en utilisant une taille différente du stylo. Vois ce qui s'est passé? Quand la frontière est devenue plus grande, il a mangé l'espace libre avant le rectangle (à gauche).

Je me demande s'il y a une sorte de propriété qui fait de la frontière être dessinée à l'intérieur du rectangle, de sorte que la distance au rectangle soit toujours la même. Merci.

27
undsoft

Vous pouvez le faire en précisant pénalisation

Pen pen = new Pen(Color.Black, 2);
pen.Alignment = PenAlignment.Inset; //<-- this
g.DrawRectangle(pen, rect);
52
hultqvist

Si vous souhaitez que les limites extérieures du rectangle soient contraintes dans toutes les directions, vous devrez le recalculer par rapport à la largeur du stylo:

private void DrawRectangle(Graphics g, Rectangle rect, float penWidth)
{
    using (Pen pen = new Pen(SystemColors.ControlDark, penWidth))
    {
        float shrinkAmount = pen.Width / 2;
        g.DrawRectangle(
            pen,
            rect.X + shrinkAmount,   // move half a pen-width to the right
            rect.Y + shrinkAmount,   // move half a pen-width to the down
            rect.Width - penWidth,   // shrink width with one pen-width
            rect.Height - penWidth); // shrink height with one pen-width
    }
}
6
Fredrik Mörk

Ce n'est pas une réponse directe à la question, mais vous voudrez peut-être envisager d'utiliser le ControlPaint.DrawBorder méthode. Vous pouvez spécifier le style de frontière, la couleur et diverses autres propriétés. Je pense que j'ai aussi Il gère l'ajustement des marges pour vous.

1
Noldorin

Je suppose que non ... mais vous pouvez déplacer la position de dessin la moitié de la taille du stylo vers le bas à droite

0
Scoregraphic