如何使表单最顶层的应用程序?

我正在制作excel加载项,其中单击菜单项或工具栏按钮,表单已打开。 我已经将表单的最顶层设置为true,但它仍然是windows xp的所有应用程序的最顶层。 我只需要保持最顶级的Microsoft Excel。

我在Excel – > 2003中选择了Visual Studio 2008中的项目。

请告诉我如何以任何方式做到这一点……..

您可以将表单的所有者设置为Microsoft Excel窗口。 在Windows中, 拥有的窗口始终显示在其所有者上方。 对话框和Excel中的搜索框之类的东西都是拥有的窗口,这使得它们显示在其所有者之上。

您可以通过以下几种方式设置表单的父级:

  1. Form.Owner属性(尽管所有者必须是另一种forms)
  2. 使用Form.Show(IWin32Window所有者)重载。 (有关如何将窗口句柄转换为IWin32Window,请参阅此博客文章 )。
  3. 将SetWindowLong()与GWLP_HWNDPARENT参数一起使用。
  4. 使用ShowDialog()作为Mikael Svenson的建议。

这确实需要您了解Excel应用程序窗口句柄。

[编辑 – 更改代码]

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