This is the popular question about form collaboration. The most robust solution is implementation of an appropriate interface in form class and passing the interface reference instead of reference to a "whole instance" of a Form.
Please see my past answer:
How to copy all the items between listboxes in two forms[
^].
This is especially convenient if you use partial declaration for form classes. Note that if you have the class in different parts (which can be in different files), you don't need to show all the inheritance list. In one part, say, you add the base class, in another part you don't need it. When you implement some interface, add it in the inheritance list of one part of the class (and nothing more), and implement this interface in the same part.
Pass the instance of this form as the interface interface to another form. That form can now call members of the first form through this interface. In more rare cases, you can implement two interfaces in two collaborating forms and pass the interface references to each one to both. I hope you got the idea.
Please also see other solutions in this discussion. If the application is simple enough, the solution could be as simple as declaring of some
internal
property in one form and passing a reference to the instance of one form to the instance of another form. For more complex projects, such violation of strictly encapsulated style and
loose coupling could add up the the
accidental complexity of the code and invite mistakes, so the well-encapsulated solution would be preferable.
Please see also:
http://en.wikipedia.org/wiki/Accidental_complexity[
^],
http://en.wikipedia.org/wiki/Loose_coupling[
^].
[EDIT #] First link fixed.
—SA