3

ダブルバッファ パネルを使用してイメージをペイントしてきましたが、pictureBoxをその上に移動すると、ちらつきや遅延が発生します。

pictureBoxes を移動するために使用しているコードは次のとおりです。

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    x = e.X;
    y = e.Y;
    panel1.Invalidate();
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        pictureBox1.Left += (e.X - x);
        pictureBox1.Top += (e.Y - y);
    }
}

private void panel1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(pictureBox2.BackgroundImage, new Rectangle(pictureBox2.Location, pictureBox2.Size));       
}

ご覧のとおり、表示されていない pictureBox2 がダブルバッファ パネルに描画されます。ただし、pictureBox1 を移動すると、パネル全体でちらつきます。はい、私はInvalidate() パネルを使用しています

私が使用するダブルバッファ パネル クラスコードは次のとおりです。

public class DoubleBufferPanel : Panel
{


    public DoubleBufferPanel()
    {

        // Set the value of the double-buffering style bits to true.
        this.DoubleBuffered = true;



        this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint |
         ControlStyles.AllPaintingInWmPaint, true);

        this.UpdateStyles();

    }

}

これは、ちらつきなしで達成しようとしているものの写真です(マウスで動かされていないpictureBoxesがパネルにペイントされています)。ちらつきを見ずにこれを行うことはできません ここに画像の説明を入力

4

1 に答える 1

0

Invalidateの代わりに呼び出すため、遅れますRefresh。Form にもダブルバッファリングを設定してみてください。それでも解決しない場合は、カスタム コントロールに関するチュートリアルを読んでください。 リンク

于 2012-09-27T08:22:00.633 に答える