With proper design, only one form is needed; and this is probably the best design for most cases. Sometimes, some modal forms are also needed, but we may not count them.
What you have now separate forms should become container controls like
. You can change Z-order or visibility of those controls which would create an impression of "changing" the form, you can switch tab pages of
. You can also shrink/expand panels. Finally, you can create a docking interface, pretty much like the one of Visual Studio.
You can easily implement all such design except docking interface, which would be a huge amount of work. Unfortunately, at this time, I don't know a good open-source ready-to-use docking library (but for WPF this is AvalonDock).
For a very good and easy-to-implement solution I would recommend