You don't specify winforms, but that seems very likely based on your question.
You are presumably calling Invalidate() or Refresh() depending upon your heart's desire.
Refresh() on a control should make the control and its children to repaint.
If you call Invalidate(true) on a control, the child controls should also receive the invalidate message. Invalidate() without the true parameters is not recursive.