我在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应用程序,而不是另一个窗体。
答案 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));