Nineballrocks,

This is an answer for the original message, with a suggestion on how to avoid the possible circular reference you may fall into.

So you have assembly A - an exe, which pops up a form form1, and assembly B - a dll, which defines the type of a form form2 - which is created by form1. You want to access form1 from form2. What does that mean? You want to have a reference to form1 stored as a member in form2? Or you semply need to access controls of form1 in form2?

You may try to separate the definition of form1 in another dll A1 and create a simple .exe with a calls whose main starts it, but you will have cyclic reference, because A1 refers to B, and B would refer to A1 (I don't even know if this is allowed - I always avoided it). That's why I suggest to define an interface (either in a separate dll, or in the dll of form2), have form1 implement that interface, enrich form2 with a member whose type is that interface, and you are done - form2 need not refer form1 anymore. You can simply assign to that member of form2 the reference to form1.

However, if you only need to pass some data from form2 to form1 - that is, to use controls of form1 from form2 - I think using events is much more suitable. I am a fan of .Net events mechanism You will have then to be careful of threading issues.

Hope this helps.
Petru