我有一个插件,它通过功能区栏上的按钮将工具窗口显示为showdialog。这个模型版本工作正常。现在,我需要允许与表单下的电子表格进行交互。我试过了:
spec.Show(((IWin32Window)Globals.myAddin.Application.ActiveWindow));
我收到了“可疑的演员”错误。当然'这个'失败了,因为工具栏不是可投射到'IWin32Window'的形式
我希望它的功能类似于内置的查找窗口,您可以在其中调用它并仍与底层电子表格进行交互。表格很简单:
public partial class Spec : Form
显然,我错过了一些东西。 TIA
根据Slaks评论添加此内容:
public class DialogService
{
public void ShowDialog(Form dialog)
{
NativeWindow mainWindow = new NativeWindow();
//mainWindow.AssignHandle(Process.GetCurrentProcess().MainWindowHandle);
Application app = new Application();
mainWindow.AssignHandle(new IntPtr(app.Hwnd));
dialog.Show(mainWindow);
mainWindow.ReleaseHandle();
}
}
使用app.Hwnd或Process.GetCurrentProcess()时的问题.MainWindowHandle表格立即消失。也许我过于复杂了。还有比我在这里做的更好的方式吗?
答案 0 :(得分:0)
您需要创建自己的实现IWin32Window
的类,并从其HWND
属性中返回Excel的Handle
。