
Hi Corey,
I agree with you that this is a big issue and we always want to make our products the best that they can be and provide features that other companies don't. We are committed to making the best product possible and pleasing our customers. Therefore, I have started looking into this in-depth for you.
I believe that I didn't explain our history on this issue properly so let me start over. First you are looking at the .NET 2.0 world, but when we first looked into this, it was back in the .NET 1.0 world and that's what most of my comments were referring to. Up until today, I hadn't looked into how the 2.0 framework handles MDI merging. So I spent a lot of time today on this issue to make sure all my information is up to date. I created a number of tests, looked at the .NET framework source code via Reflector, and Googled some things. Here's what I found (I'll start off with the old style of menus)...
MDI Merging Using MainMenu Class (this is the "old" style of main menu)
What I had stated in previous messages is correct. .NET will only merge menus if you have a parent Form with IsMdiContainer=true, a child Form on it with the MdiParent set to the parent Form, and both Forms have MainMenu classes.
You had suggested making DocumentWindow a Form instead so that tabbed MDI picks up menus. I tried this in a test app, and it didn't work. So I looked at the .NET source code and verified that indeed, it will only automatically merge menus if the parent Form has a child Form accessible via its ActiveMdiChild property. But unfortunately to fill that property, you need to use standard MDI. Since our tabbed MDI doesn't use a parent Form with IsMdiContainer=true, this can never work.
You mentioned that a competitor has this working (not sure if you mean old style menus or the new 2.0 MenuStrip controls). If that is the case for the old style menus, then they might still be using IsMdiContainer=true and managing to assign the ActiveMdiChild somehow through Windows messages since it isn't accessible via .NET code without using standard MDI behavior. I'll try and check out their implementation to see what they are doing.
You can merge menus programmatically with Menu.MergeMenu, however there is no programmatic way to "un-merge" them. I verified this with Google searches. So unfortunately that leaves out the option of us programmtically merging menus when using tabbed MDI.
MDI Merging Using .NET 2.0 MenuStrip Class
After doing a number of tests, using these controls yield the same results as above when it comes to a tabbed MDI implementation where IsMdiContainer=false. MenuStrips only automatically merge menus if the parent Form is assigned a child MDI Form, which would be accessible via ActiveMdiChild. So again we have the same issue.
However, here's the good part! Microsoft exposed the code to programmatically merge and un-merge MenuStrips via the ToolStripManager class. This means that once we compile UIStudio in .NET 2.0, we should be able to get MenuStrip merging automated for tabbed MDI.
The other good news is that I believe with the addition of a new event to DockManager, you'd be able to get it all working now until we get our .NET 2.0 compilation out. We're going to do some tests to see if our idea works. Then if so I can send you the code or post it on what you need to do. Basically what I'd post is what we will make internal in our .NET 2.0 compilation.
So I hope we can move forward together on this. Like I said, we want to keep you pleased and now that I've looked at the MDI features in the .NET 2.0 framework, it looks like we can come up with a solution.