【问题标题】:Create an Event for when this,toplevel value changes当这个顶层值发生变化时创建一个事件
【发布时间】:2017-07-13 17:31:37
【问题描述】:

我希望能够让我的应用程序始终处于领先地位。因此,当我打开一个新程序并且即使我将 this.TopLevel 值设置为 true 时它仍处于顶部,应用程序将看到它不再处于顶部,然后返回顶部。 我知道我可以用计时器来做到这一点,但我希望他们是更好的方法。

【问题讨论】:

  • 但是您是否应该确定在用户的多任务环境中向用户显示什么窗口?
  • 这是一个覆盖应用程序,有一个复选框可以激活此功能。
  • 如果别人写了同样的程序怎么办?
  • 万一您使用 WPF,它有一个内置功能可以让应用程序保持在最前面。

标签: c# visual-studio toplevel


【解决方案1】:

您可以使用位于user32.dll 中的方法。

using System.Runtime.InteropServices;

您将需要这些变量:

private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private const UInt32 SWP_NOSIZE = 0x0001;
private const UInt32 SWP_NOMOVE = 0x0002;
private const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;

从 DLL 中导入方法...

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

然后在您的代码中,使用它来将窗口位置设置为最顶部的窗口。

SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);

希望对你有帮助!

【讨论】:

    【解决方案2】:

    我建议你抓住新窗口的事件,看看新窗口打开后你是否在最前面:

    https://stackoverflow.com/a/40698254/2557128

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 2018-03-24
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多