Panel をサブクラス化し、OnPaintBackground をオーバーライドせずに、パネルの消去を無効にする方法はありますか?
Panel をサブクラス化せずに、ダブル バッファリング効果を達成しようとしています。これをしようとするのは奇妙なことかもしれないことは理解していますが、少なくともできるかどうか知りたいです。次のコード サンプルは、これを示しています。
public partial class Form1 : Form
{
private Bitmap m_image;
public Form1()
{
InitializeComponent();
panel1.Paint += new PaintEventHandler(panel1_Paint);
panel1.MouseMove += new MouseEventHandler(panel1_MouseMove);
m_image = new Bitmap(panel1.Width, panel1.Height);
}
void panel1_MouseMove(object sender, MouseEventArgs e)
{
using (Graphics g = Graphics.FromImage(m_image))
{
g.FillEllipse(Brushes.Black, new Rectangle(e.X, e.Y, 10, 10));
}
panel1.Invalidate();
}
void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(m_image, 0, 0);
}
}
これにより、おそらく各ペイント サイクルでパネルが消去されるため、ちらつきが発生します。