Excel加载项:如何将Windows窗体显示为Excel应用程序的MdiChild

时间:2015-05-05 17:13:48

标签: vsto

我在VSTO插件项目中有一个Windows窗体[myForm] - 目前当我.Show()这个窗体显示在Excel应用程序之外(在我的情况下在另一台显示器上),但我希望它显示作为托管它的Excel应用程序的MdiChild,所以在主Excel应用程序窗口中。

myForm x = new myForm;
x.Show();

Show()的重载接受System.Windows.Forms.IWin32Window类型的所有者参数,但是我不确定这是否可以这样做?

表单还有一个MdiParent属性,类型为System.Windows.Forms.Form,但在这种情况下,我希望父对象是Excel应用程序,而不是另一个窗体。

1 个答案:

答案 0 :(得分:2)

Window类的 Hwnd 属性返回一个代表窗口句柄的整数。但是Show方法接受IWin32Window接口的实例,该实例公开Win32 HWND句柄。要获取接口的实例,您需要声明一个实现该接口的类。

public class WindowImplementation : System.Windows.Forms.IWin32Window
{
   public WindowImplementation(IntPtr handle)
   {
      _hwnd = handle;
   }

    public IntPtr Handle
    {
       get
       {
          return _hwnd; 
       }
    }

    private IntPtr _hwnd;
}

然后,您可以使用以下代码来显示指定父Excel窗口句柄的表单。

form1.Show(new WindowImplementation(excelWindow.Hwnd));