2011-01-14 9 views
0

パネル上に描画するのはWindows.Formsです。
ここでのようなダブルバッファリングを使用すると、矩形領域のみを割り当てることができます。ダブルバッファリング非長方形割り当て

そして、円や楕円を描くと、残りのスペースは黒色で塗りつぶされます。
私が間違ってやっていることやこの問題に対処する方法を理解してください。
ありがとうございます! :)

私はフリッカーを防ぐためにthis.DoubleBuffered = trueを試しました。それは役に立たない。

Var pは、それに何かを描くためのパネルです。あなたがやろうとしているか、または潜在的に間違ってここにやっていてもいなくてもよいものをどのようにコメントなし

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Dr(bool variant) 
    { 
     BufferedGraphicsContext currentContext; 
     BufferedGraphics myBuffer; 
     currentContext = BufferedGraphicsManager.Current; 
     myBuffer = currentContext.Allocate(panel1.CreateGraphics(), panel1.DisplayRectangle); 
     LinearGradientBrush lgb; 
     if (variant) lgb = new LinearGradientBrush(new Point(0, 0), new Point(500, 500), Color.Red, Color.DarkRed); 
     else lgb = new LinearGradientBrush(new Point(0, 0), new Point(500, 500), Color.DarkRed, Color.Red); 
     myBuffer.Graphics.FillEllipse(lgb, 0, 0, 300, 300); 
     myBuffer.Graphics.DrawString("Lorem ipsum", new Font("calibri", 40), Brushes.White, new PointF(50, 50)); 
     myBuffer.Render(); 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Dr(true); 
    } 

    private void panel1_MouseEnter(object sender, EventArgs e) 
    { 
     Dr(false); 
    } 

    private void panel1_MouseLeave(object sender, EventArgs e) 
    { 
     Dr(true); 
    } 
} 

答えて

2

は、基本的な問題がちらついていません。ダブルバッファリングは役に立ちません。あなたが描画しなかったバッファに追加したパネルのどの部分にも記入することを怠った。

Brush solidBrush = new SolidBrush(p.BackColor); 
myBuffer.Graphics.FillRectangle(solidBrush, 0, 0, p.Width, p.Height); 

これは、元のパネルの元の色で全体を塗りつぶします。

しかし、これで直ちに問題は解決しますが、依然として必要なように機能しない可能性があります。フォーム上にウィンドウを移動してみてください。何らかの理由でパネルが再描画されるとすぐに、描画したものはなくなりました。永続的な図面を持つパネルを作成するには、独自のコントロールを作成し、パネルから継承し、コントロールのOnPaintメソッドでカスタム図面を実装する必要があります。

C#Winformsコントロールは本当に透明ではありません。したがって、透明な背景が必要な場合は、独自のコントロールを作成する必要があります。

http://www.bobpowell.net/transcontrols.htm

+0

しかし、私は、フォームの背景画像パターンを使用していますので、私は透明のBackColorプロパティを望むものであれば:技術がここに記述されていますか? –

+0

上記の編集を参照してください – Sisyphus

+0

ありがとうございます。私は感謝しています:) –