OK, lets go back a stage or two.
OOPs principles are simple: abstraction, inheritance, encapsulation, and polymorphism - and one of the things they imply is that two classes should not know details about each other because that means that they are locked together: you cannot change the internal workings of a class without knowing how the other class would be affected by the changes.
And that's bad. Very bad! It reduces reusability, and makes maintenance a nightmare.
What you are trying to do locks the parent and child together: the child can only be instantiated by an instance of the parent. And while that is simple to do (just pass the parent to the child constructor) it makes your code less reliable and a whole lot messier.
Instead, the child provides a property or method so that the parent can pass the data the child needs into it, and the parent handles an event the child raises to say "I need data".
Have a look here:
Transferring information between two forms, Part 2: Child to Parent[
^] - the code won't be identical in your case because the child is requesting data, but it'll be very similar. And the parent passes back the data very easily:
Transferring information between two forms, Part 1: Parent to Child[
^]