There is no such thing as "open a form". (Yes, terminology is misleading. There is "close", but none of the form methods "opens" it. You need to hold you fantasy and not assume the everything in API is named according to your intuitive understanding of things; it can betray your.) You can create an instance of the form and show it, that's all:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.show.aspx[
^],
http://msdn.microsoft.com/en-us/library/szcefbbd.aspx[
^] (rarely makes sense),
http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx[
^],
http://msdn.microsoft.com/en-us/library/w61zzfwe.aspx[
^].
The situation with your understanding of "projects" is even worse. A project is actually some data set instructing compiler (and, sometimes, some other tools) to build an
assembly out of source code. There are no "projects" during runtime, but the central notion of the CLR and the main unit is assembly. With Visual Studio, each project creates a single assembly consisting of one single executable
module. (Compilers allow to create an assembly made of one or more of modules, but Visual Studio does not support it by default.) One assembly can
reference others; and the referenced assembly serves as a shared class library unit to the assembly referencing it. Basically, that's all.
When an application is built, it can be an assembly referencing other assemblies, and each of referenced assemblies can reference some other ones. It's nearly irrelevant, what classes are written in what assemblies; the cross-assembly visibility is controlled by
public
and
protected
access modifiers, that's all. You can write a Form class in one assembly, and create a form instance of this time in another one, if you reference the first assembly. There is no need to ask how.
In exact same way as in the case of a single assembly.
—SA