And why doesn't it work?

I have never heard about the RadTextBox, but I would be very surprised if it's a control that does not derive in some way or another from the Control class. I it does derive from Control then the code Hack posted should work when you change TextBox to RadTextBox.
You seem to have made a few other changes that break the code completely.

It should be like this:
Code:
 Dim ctrl As Control = Me.GetNextControl(Me, True)
        Do

            Dim tb As RadTextBox = TryCast(ctrl, RadTextBox)
            If tb IsNot Nothing Then tb.ReadOnly = IsReadOnly
         
            ctrl = Me.GetNextControl(ctrl, True)
        Loop Until ctrl Is Nothing
    End Sub
Two changes I made are highlighted in bold, the third is that I removed the TypeOf check. It's not strictly wrong to use it, but you should either use TypeOf in combination with DirectCast, as Hack showed you, or use only TryCast, as I showed. A combination works too, but it defeats the point of using my method completely