2010-04-10 36 views
6

我正在製作excel插件,點擊菜單項或工具欄按鈕,Form打開。我將窗體的頂部設置爲true,但它仍然是Windows XP所有應用程序的最高層。我只需要保持最高級到Microsoft Excel。如何使表單最上層到應用程序?

我在Visual Studio 2008中選擇了項目,在Excel - > 2003中。

請告訴我該怎麼做任何方式........

回答

9

您可以設置窗體的所有者是Microsoft Excel中窗口。在Windows中,owned windows始終顯示在其所有者之上。對話框和類似Excel中搜索框的東西都是擁有的窗口,這就是讓它們顯示在其所有者之上的窗口。

有幾個方法可以設置窗體的父:

  1. Form.Owner財產(雖然業主必須是另一種形式)
  2. 使用Form.Show(IWin32Window owner)超載。 (關於如何將窗口句柄轉換爲IWin32Window,請參閱此blog post)。
  3. 使用SetWindowLong()和GWLP_HWNDPARENT參數。按照Mikael Svenson的建議,使用ShowDialog()

這確實需要您瞭解Excel應用程序窗口句柄。

+0

良好的分享。你的第二條路最終解決了我的問題。 – 2010-04-10 14:12:18

+0

感謝您的回答... – 2010-04-10 14:13:22

1

[編輯 - 改變代碼]

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 

void func() 
{ 
    Form1 f = new Form1(); 
    SetParent(f.Handle, (IntPtr)ThisAddIn.ExcelApplication.Hwnd); 
    f.Show(); 
} 
+0

但我需要在Excel對話框打開時工作。 – 2010-04-10 13:45:22

+0

更改我的代碼以使用設置窗口的父項。 – 2010-04-10 14:30:04

相關問題