Je rencontre un problème avec GDI + lors de la personnalisation de rectangles en pointillés.Les rectangles en pointillés semblent solides lors de l'expansion de la fenêtre Winform
La partie verticale des rectangles en pointillés apparaît sous la forme de lignes continues et continues lorsque la taille de la fenêtre est augmentée ou lorsque vous faites défiler vers le haut ou vers le bas. Déplacer la souris plus rapidement entraîne de moins en moins de sections solides. Curieusement, les lignes horizontales ne présentent pas ce comportement et apparaissent comme prévu.
Jusqu'à présent, deux solutions non optimales ont été mis à ResizeRedraw = true
ou appeler Invalidate()
pendant OnResize()
et OnScroll()
. Je voudrais bien sûr éviter cela car ce que je dessine vraiment est plus complexe et ces appels lents détruisent l'expérience fluide. J'ai également essayé d'invalider seulement la zone nouvellement montrée en vain - seulement un Invalidate complet semble fonctionner.
Des pointeurs sur la façon de résoudre ce problème?
Code de démonstration:
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
public class Form1 : Form
{
static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
this.ClientSize = new System.Drawing.Size(472, 349);
DoubleBuffered = true;
//ResizeRedraw = true;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int dimensions = 70;
using (Pen pen = new Pen(Color.Gray))
{
pen.DashStyle = DashStyle.Dash;
for (int x = 0; x < 20; ++x)
{
for (int y = 0; y < 20; ++y)
{
Rectangle rect = new Rectangle(x * dimensions, y * dimensions, dimensions, dimensions);
e.Graphics.DrawRectangle(pen, rect);
}
}
}
}
}
Merci, qui a fait l'affaire Mark. Les deux problèmes mentionnés semblent être vrais. La ligne continue apparaît lorsque vous dessinez un seul rectangle sur le bord gauche, mais pas sur le côté droit. De plus, toutes les sections verticales découvertes affichent également ce comportement (seule la ligne droite du rectangle le plus à droite semble correcte). Étant donné que mon représentant est trop faible pour modifier un message, quelqu'un peut-il modifier la condition dans la première boucle pour 'y