如何使窗体仅顶置于应用程序?

8

我正在制作一个Excel插件,其中点击菜单项或工具栏按钮会打开表单。我已将表单的“置顶”属性设置为true,但它仍然在Windows XP的所有应用程序中保持置顶。我只需要它在Microsoft Excel中保持置顶。

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

请告诉我如何以任何方式实现这一点........

2个回答

13
你可以将表单的所有者设置为Microsoft Excel窗口。在Windows中,拥有窗口总是显示在它们的所有者上方。Excel中的对话框和搜索框都是拥有窗口,这就是使它们显示在其所有者上方的原因。
有几种方法可以设置表单的父级:
  1. Form.Owner属性(虽然所有者必须是另一个表单)
  2. 使用Form.Show(IWin32Window owner)重载。(请参见此博客文章如何将窗口句柄转换为IWin32Window)
  3. 使用SetWindowLong()和GWLP_HWNDPARENT参数。
  4. 像Mikael Svenson建议的那样使用ShowDialog()
这需要你知道Excel应用程序窗口的句柄。

如果您正在使用“Form.Owner”,请不要忘记将“TopMost”设置为“False”! - Ghasem

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接