我有一个插件,它通过功能区栏上的按钮将工具窗口显示为 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 时的问题会立即消失。也许我把这件事复杂化了。有没有比我在这里所做的更好的方法?