your
paint
method is just private method. It will never be called unless you cal it specifically in your code. You need to override OnPaint and place your painting code there. It will be trigerred by on Invalidate.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
}