C# 创建此顶级值更改时的事件

C# 创建此顶级值更改时的事件,c#,visual-studio,toplevel,C#,Visual Studio,Toplevel,我希望我的申请能够一直处于首位。因此,当我打开一个新程序时,即使我将this.TopLevel值设置为true,该程序也会变为顶部,应用程序将看到它不再位于顶部,然后返回顶部。 我知道我可以用定时器来完成这项工作,但我希望他们的方式更好。我建议你关注新窗口的活动,看看新窗口打开后你是否处于领先地位: 我建议您关注新窗口的活动,看看新窗口打开后您是否处于领先地位: 您可以使用位于user32.dll中的方法 using System.Runtime.InteropServices; 您将需要以下

我希望我的申请能够一直处于首位。因此,当我打开一个新程序时,即使我将this.TopLevel值设置为true,该程序也会变为顶部,应用程序将看到它不再位于顶部,然后返回顶部。
我知道我可以用定时器来完成这项工作,但我希望他们的方式更好。

我建议你关注新窗口的活动,看看新窗口打开后你是否处于领先地位:


我建议您关注新窗口的活动,看看新窗口打开后您是否处于领先地位:


您可以使用位于
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);

我希望这对你有帮助

您可以使用位于
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);

我希望这对你有帮助

但是,您是否应该确定用户在其多任务环境中显示的窗口?这是一个覆盖应用程序,具有激活此功能的复选框。如果其他人编写了相同的程序,该怎么办?以防您使用WPF,它有一个内置的功能来保持应用程序在顶部。但是您应该确定用户在多任务环境中显示的窗口吗?这是一个覆盖应用程序,它有一个复选框来激活此功能。如果其他人编写了相同的程序呢?以防您使用WPF,它有一个内置的功能,以保持应用程序的顶部。