This is very weird, I just tried reproducing the problem with a simple form, containing 3 RichTextBoxes. One of the boxes lives inside a panel, and this one doesn't clear with the for each control in controls... method.
This is strange, because as others have said already, it should work.
Here's my solution: explicitly recurse over all controls in a Form (which itself is a Control as well). Use ClearControl(Me) in your code (Me is a Form is a Control).
Implementation:
'If a control has a collection of sub-controls, it's a container.
'In this case: recurse over its children until you hit a child without sub-controls.
'Then check if it's a (rich)TextBox and clear.
Private Sub ClearControl(ByVal ctrl As Control)
If ctrl.Controls.Count > 0 Then
For Each subCtrl As Control In ctrl.Controls
ClearControl(subCtrl)
Next
End If
If TypeOf ctrl Is RichTextBox Then
DirectCast(ctrl, RichTextBox).Clear()
End If
'You can clear other types of controls in here as well
If TypeOf ctrl Is TextBox Then
DirectCast(ctrl, TextBox).Clear()
End If
'etcetera...
End Sub
I hope this works for you.