Я думаю, вы не очистили буфер изображения элемента управления. Вы только очистили задний буфер. Попробуйте это между двумя вызовами DrawImage:
e.Graphics.Clear(Color.White);
Это должно сначала очистить любое оставшееся изображение.
В качестве альтернативы, вы можете переписать его так, чтобы все рисовалось в заднем буфере, а задний буфер затем рисовался на экране точно (0, 0), поэтому любые проблемы будут из-за логики рисования заднего буфера, а не где-то между.
Примерно так:
Graphics gxOff; //Offscreen graphics
Brush backBrush;
if (m_bmpOffscreen == null) //Bitmap for doublebuffering
{
m_bmpOffscreen = new Bitmap(ClientSize.Width, ClientSize.Height);
}
// draw back buffer
gxOff = Graphics.FromImage(m_bmpOffscreen);
gxOff.Clear(Color.White);
backBrush = new SolidBrush(Color.White);
gxOff.FillRectangle(backBrush, this.Left, this.Top,
this.ClientRectangle.Width,
this.ClientRectangle.Height);
//Draw some bitmap
gxOff.DrawImage(imageToShow, this.Left, this.Top, rectImageToShow, GraphicsUnit.Pixel);
//Draw from the memory bitmap
e.Graphics.DrawImage(m_bmpOffscreen, 0, 0);
base.OnPaint(e);
Не уверен, что это правильно, но вы должны понять.