2012-10-04 56 views
0

我有一個插件,顯示一個工具窗口作爲showdialog從一個功能區上的按鈕。這個模型版本工作正常。現在我需要允許與表單下的電子表格進行交互。我曾嘗試過:form.show無模式從ribbonbar

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

而且我收到「可疑的演員」錯誤。當然,'這'失敗了,因爲工具欄不是'IWin32Window'的表格,所以我希望它的功能類似於內置的查找窗口,您可以在其中調用它並仍然與底層電子表格進行交互。表格很簡單:

public partial class Spec : Form 

顯然,我錯過了一些東西。 TIA


添加此基礎上Slaks評論:使用app.Hwnd或Process.GetCurrentProcess()MainWindowHandle立即形式自敗時

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(); 

     } 
    } 

問題。也許我已經過分複雜了。有沒有比我在這裏做的更好的方法?

回答

0

您需要創建自己的類,該類實現IWin32Window,並從其Handle屬性返回Excel的HWND

+0

我添加了我對原始文章所做的代碼。 –