Buffer duplo quando não está desenhando OnPaint (): por que não funciona?
Estou trabalhando em um aplicativo de desenho vetorial simples em C # / .net. O desenho é feito em um painel, mas não estou usando o evento OnPaint () para tudo isso - na verdade, o OnPaint () apenas chama outro método que realmente desenha tudo no documento.
Tentei adicionar buffer duplo, mas quando defino DoubleBuffered como true, o problema de flicker é ainda pior. Por que é isso? Se eu quiser fazer um buffer duplo do controle, preciso absolutamente fazer todo o meu desenho no evento OnPaint (), com o objeto Graphics fornecido, em vez de usar Panel.CreateGraphics () e depois desenhar para isso?
Edição: Este é o código básico que estou usando.
private void doc_Paint(object sender, PaintEventArgs e)
{
g = doc.CreateGraphics();
Render(ScaleFactor, Offset);
}
private void Render(float ScaleFactor, PointF offset)
{
foreach (Line X in Document.Lines) { DrawLine(X.PointA, X.PointB, X.Color, X.LineWidth); }
}
private void DrawLine(PointF A, PointF B, Color Color, float Width)
{
Pen p = new Pen(Color, Width);
PointF PA = new PointF(((A.X + Offset.X) * ScaleFactor), ((A.Y + Offset.Y) * ScaleFactor));
PointF PB = new PointF(((B.X + Offset.X) * ScaleFactor), ((B.Y + Offset.Y) * ScaleFactor));
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawLine(p, PA, PB);
}
A ideia geral é que as duas variáveis, ScaleFactor e Offset, se refiram ao nível de zoom e ao nível de panorâmica na interface do usuário. g é um objeto gráfico.