0

我有一个插件,它通过功能区栏上的按钮将工具窗口显示为 showdialog。这个模型版本工作正常。现在我需要允许与表单“下”的电子表格进行交互。我努力了:

spec.Show(((IWin32Window)Globals.myAddin.Application.ActiveWindow));

我收到一个“可疑演员表”错误。当然 'this' 惨遭失败,因为工具栏不是可转换为 '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 时的问题会立即消失。也许我把这件事复杂化了。有没有比我在这里所做的更好的方法?

4

1 回答 1

0

您需要创建自己的类,该类实现并从其属性IWin32Window返回 Excel 。HWNDHandle

于 2012-10-04T18:57:13.467 回答