ダブルバッファ パネルを使用してイメージをペイントしてきましたが、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がパネルにペイントされています)。ちらつきを見ずにこれを行うことはできません