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

发布于 2024-08-28 13:00:13 字数 210 浏览 9 评论 0原文

我正在制作 Excel 插件,其中单击菜单项或工具栏按钮,打开表单。我已将窗体的最顶层设置为 true,但它仍然是 Windows XP 的所有应用程序的最顶层。我只需要保持 Microsoft Excel 的最高位置即可。

我选择了 Visual Studio 2008 中的项目,Excel -> 2003 中的项目。

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

I am making excel add-in in which clicking on menu item or toolbar button, Form opened. I have set form's topmost to true but it remain topmost to all applications of windows xp. I just need to remain topmost to Microsoft Excel only.

I have choosed project in Visual Studio 2008, in Excel ->2003.

Please tell me how to do that with any way ........

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你又不是我 2024-09-04 13:00:13

您可以将表单的所有者设置为 Microsoft Excel 窗口。在 Windows 中,始终显示拥有的窗口高于他们的主人。对话框和 Excel 中的搜索框等内容都是自有窗口,这使得它们显示在其所有者上方。

有几种方法可以设置表单的父级:

  1. Form.Owner 属性(尽管所有者必须是其他表单)
  2. 使用 Form.Show(IWin32Window 所有者) 重载。 (有关如何将窗口句柄转换为IWin32Window)。
  3. SetWindowLong() 与 GWLP_HWNDPARENT 参数结合使用。
  4. 使用 ShowDialog( )正如米凯尔·斯文森(Mikael Svenson)建议的那样。

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

You can set your Form's owner to be the Microsoft Excel window. In Windows owned windows are always displayed above their owner. Dialogs and things like the search box in Excel are owned windows, which is what keeps them displayed above their owner.

There are a couple of ways you can set a Form's parent:

  1. The Form.Owner property (although the owner has to be another form)
  2. Use the Form.Show(IWin32Window owner) overload. (See this blog post for how translate an window handle to an IWin32Window).
  3. Use SetWindowLong() with the GWLP_HWNDPARENT parameter.
  4. Use ShowDialog() as Mikael Svenson suggested.

This does require you to know the Excel applications window handle.

梦萦几度 2024-09-04 13:00:13

[编辑-更改的代码]

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

[Edit - changed code]

[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();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文