Freigeben über


Hosting Windows Forms controls in the Office Task Pane

OK, here's a question I hear frequently: I want a richer user interface in my Smart Document task pane than the default controls allow. I know I can add ActiveX controls in there, but we've standardised on .NET as our development platform now. Can I create a user control in managed code and expose it as an ActiveX control using COM interop, then host it in the task pane?

 

The short answer to this is no.  The longer answer goes like this:

In .NET Framework 1.0 the hosting of managed Windows Forms controls in unmanaged hosts was supported in exactly one unmanaged host: Microsoft Internet Explorer. No other popular COM control hosts, like MFC, Visual Basic 6.0, or ATL, were supported in version 1.0. While neither Visual Basic 6.0 nor ATL is officially supported in version 1.1 either, the Windows Forms team did a full test cycle on hosting Windows Forms controls as COM controls in MFC 7.1—the version of MFC that comes with Visual Studio .NET 2003—and it is now an officially supported unmanaged host. The upshot of this is that as of today, managed controls are not supported in the Office task pane. If you try to do it you will very likely have problems getting the controls to accept the focus, or even getting the controls to render at all.

 

Now the good news is that technology is in the pipeline that will solve this problem: Visual Studio Tools for Office 2005 provides a task pane design surface onto which you can add any .NET control.  Not only that it provides many more advances too: the ability to program the task pane without requiring an XML schema be attached to the document, the ability to add any managed control directly onto the surface of a document or spreadsheet, and a server-side model for manipulation of data stored in .doc and .xls files.

 

So, to sum up, if you want a rich user interface to sit alongside a Word or Excel document and support the user as they are working with a document, these are your options:

  1. Create your ActiveX control in unmanaged code and host it in a Smart Document Task Pane today.  The downside of this is that you are investing in developing a solution that will become legacy technology almost as soon as it is complete.
  2. If your solution won't ship until mid-2005, then get started using the Visual Studio Tools for Office 2005 Beta and make use of this and all the other goodies it brings.
  3. Create a VSTO 1.0 solution that uses a modeless window to host a managed user control today.  With a little work you could get the window to resize itself in a smart way, a little like the Help window does in Office 2003.  Then, when VSTO 2005 ships it should be pretty easy to migrate the user control to the VSTO Task Pane.  For my money this is a great compromise approach.  Whilst you don't get to host your controls in the task pane today, you do get all the advantages of working with managed code, a neat upgrade path to VSTO 2005 and the knowledge that the investment you make in writing user controls now won't be wasted when the next version of VSTO ships.

Comments

  • Anonymous
    October 04, 2004
    Hi Mark,

    I have a question with regards to your point 3 in the above post that says 'Create a VSTO 1.0 solution that uses a modeless window to host a managed user control today'.

    I am trying to do this by bringing up a WinForm when a button on the task pane is clicked. The WinForm comes up fine as long as it contains System.Windows.Forms Controls. As soon as I enter a third party managed control by Infragistics the WinForm Fails to come up without throwing up an exception.

    I would just like to know if what I'm trying to do complies with your point 3 in the post. Otherwise, please mention if this would be achievable through VSTO 2005.

    Thanks again,

    Wamiq Ansari
    wamiq@msn.com

  • Anonymous
    October 04, 2004
    Hi Mark,

    I have done bit more investigation on as to why my 'modeless window' fails without exception.

    As I mentioned in my previous post, this modeless window contains a managed control provided by Infragistics. There is an assembly called 'Infragistics.Win.v3.2.dll' that contains this control. This assembly is signed by Infragistics and placed in my GAC.

    My Smart Document Solution loads all the required dlls and I think it fails when it comes to loading this particular dll, from an AppDomain that is spawned by MS WORD.

    Do I have to play with this AppDomains Security settings for it to load this Infragistics dll from GAC.

    Thanks in advance,

    Wamiq Ansari
    wamiq@msn.com

  • Anonymous
    October 04, 2004
    Aaah! You need to explicitly apply full trust to the Infragistics assembly. The VSTO loader revokes full trust for All Code and Zone based security evidence. There's more details on the VSTO team blog: http://blogs.msdn.com/vsto/archive/2004/02/05/68400.aspx

  • Anonymous
    October 05, 2004
    The comment has been removed

  • Anonymous
    January 21, 2009
    PingBack from http://www.keyongtech.com/2403296-creating-a-task-pane-with

  • Anonymous
    June 14, 2009
    PingBack from http://adirondackchairshub.info/story.php?id=3547