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.
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);
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
}
}
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.
Je suppose que non ... mais vous pouvez déplacer la position de dessin la moitié de la taille du stylo vers le bas à droite