Yes of course. You can even compile some project during run-time and add compiled assemblies. And right, it can be done using interfaces.
Actually, "compiled in other assemblies" is not clear. You can statically reference the assemblies where you define forms and/or other components and than use it in your assembly. This is straightforward; you hardly need any code samples. Dynamically loading assemblies is more difficult but not a problem. Please see below.
My advice would be: never use MDI; this style is highly discourages (first of all, my Microsoft where MDI was introduced), see also:
Question on using MDI windows in WPF[
^],
MDIContainer giving error[
^].
Now, about dynamically loaded assemblies which you can use as plug-ins. Please see my sketch of plug-in functionality in my past answers:
Create WPF Application that uses Reloadable Plugins...[
^],
AppDomain refuses to load an assembly[
^].
Don't think it's very difficult. You can ignore everything related to reloadable plug-ins and Application Domain. It depends though. It you really want to unload your plug-ins, you will need all that. It's not too hard to implement but will need considerable effort in the first stage of it. Better do prototyping on highly simplified model first.
[EDIT — follow-up discussion on non-MDI UI, Tabbed UI]
Here is one more link against MDI:
http://en.wikipedia.org/wiki/Multiple_document_interface#Disadvantages[
^].
This is the simplest demonstration of Tabbed UI for forms:
Tabbed MDI Child Forms[
^].
See some more (some for WPF, some for Forms, the techniques are very close):
Multi Tab WebBrowser[
^],
Tabbed MDI in WPF[
^],
WPF C# Ribbon Control Library[
^] (complicated),
FireFox-like Tab Control[
^].
You will be able to find a lot more is you search CodeProject articles or Google. If I were you I would just take a
TabControl
and implemented it from scratch. Add main menu and status bar to an empty main form first. Add a
TabConrol
, make its
Dock = DockStyle.Fill
. That's all the framework.
What you had as child Forms will go to the Tab pages (their contents will), during design time and/or run time. Much easier then MDI children, I tell you. Same thing about your plug-ins providing content controls.
—SA