1

私は C# を学び始めたばかりで、ちらつきを避けるためにペイントする際の適切な方法についてアドバイスを求めたいと思います。

ダブルバッファリングやオンにするなど、ここで説明した方法を使用しましたWS_EX_COMPOSITEDが、私にとってうまくいく方法は次のとおりです。

の呼び出しPaintEventHandler:

this.dgData.Paint += new System.Windows.Forms.PaintEventHandler(this.myPaint);

を使用しPaintEventArgsて描画します。

private void myPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    Graphics myGraphics = e.Graphics;
    // Use myGraphics to draw
}

そして、PaintEventHandlerは の を介してトリガーRefresh()されTimerます。

private void TimerElapsed(object sender, System.EventArgs eventArgs)
{
    Refresh();
}

ただし、私の懸念は、この描画方法ではPaintEventHandler、フォームにある for every コントロールが必要になることです。

そのため、これを達成するためのよりエレガントな方法があるかどうかを尋ねたいと思います。

ありがとう!

4

1 に答える 1

0

このコードをどこで見つけたかはわかりませんが、ちらつきを取り除くためにこれを行います。コントロールのコンストラクターでこれらのスタイルを設定します。

public partial class MyControl : Control
{    
    public MyControl()
    {
        InitializeComponent()
        SetStyle(ControlStyles.UserPaint, true);
        SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        SetStyle(ControlStyles.ResizeRedraw, true);
        SetStyle(ControlStyles.UserMouse, true);
    }
}
于 2014-11-27T06:35:36.733 に答える