In this respect, user control class is no different from any other class, no matter control or not. You always need to pass something to the instance of the control, something which can be called. It could be: 1) delegate instance, 2) a reference to the class with the method(s), in this case, a form instance, but this will strongly abuse encapsulation, 3) an interface reference, in this case, you should implement some interface by your form class, much better approach.
But I would rather advise you to
invert control. Define and implement some event in your user control class, make the interface instance accessible to the user of the user control (
internal or
public). This way, the form class will be using the control. When the instance of the control is instantiated, the code of the form class should add an event handler to the invocation list of that user control event. In C#, this is the '+=' operator on the event instance. When an instance of the user control invokes the event, all event handlers will be called. As one even handler is your form's method, it will be called, and it can call any other method(s).
This way, the user control instance remains agnostic to the methods called. They can be private. And the form class remains agnostic to the detail of the call. All you need to know is the use of events:
http://msdn.microsoft.com/en-us/library/awbftdfh.aspx[
^].
And please read about the idea of
inversion of control:
http://en.wikipedia.org/wiki/Inversion_of_control[
^].
—SA