Just because you
can do something, doesn't mean you
should do something.
Setting controls as
public
is a very poor idea - it violates the principles of OOP and makes your code difficult to modify as any outside class could have used internal controls.
Instead, use properties and events to get / set data and signal that it is available.
I can't tell from your question exactly which way you need to go, but it should be covered here:
Transferring information between two forms, Part 1: Parent to Child[
^]
Transferring information between two forms, Part 2: Child to Parent[
^]
Transferring information between two forms, Part 3: Child to Child[
^]
They are aimed at forms, but the same principle applies to UserControls as well: a form (or another UserControl) containing a UserControl is the parent, the UserControl is the child.