<p>In OOP languages like C# or VB.NET, if I make the properties or methods in a super class <code>protected</code> I can't access them in my Form - they can only be accessed in my class that inherits from that super class.</p>

<p>To access those properties or methods I need to make them <code>public</code>, which defeats encapsulation, or re-write them into my class, which defeats inheritance.</p>

<p>What is the right way to do this?</p>

If you have code which needs to ask an Class to perform a specific operation but the class does not present your code with a means to do that then the Class doesn't fulfill you codes requirements.
Its bit like saying I've got a Car (Automobile) that has a protected steering wheel so I can't access it.  The car is no use to me.
Either make those members Public (or at least internal) and use them or ditch the class and use one that gives your consuming code the features it needs.
Perhaps what you are really looking for is an interface.  The interface contains the members your code needs and you implement that interface on your class.  The advantage here is that your class can determine that the members are being accessed via this Interface rather than an inheriting subclass.