【问题标题】:Windows form always on top not working c#Windows 窗体总是在顶部不工作 c#
【发布时间】:2014-01-21 14:41:06
【问题描述】:

我搜索了论坛,但似乎仍然没有正确的答案。

当用户在浏览器中操作时,我需要显示来自系统托盘应用程序的消息通知。

我希望此通知显示在所有内容之上,但即使我将其设置为 TopMost 或 TopLevel 或 BringToFront 或 Focus,我也无法实现我想要的。

我正在使用一个简单的 windows 窗体,并使用系统托盘应用程序中的 ShowDialog 显示它。

请帮帮我:)

PS:如果我从系统托盘应用程序启动通知表单而没有打开或聚焦其他应用程序,它工作正常,我只是无法在活动浏览器窗口前面显示它

【问题讨论】:

  • 如果 TopMost 不起作用,您可以尝试在 Win32 API 中使用 SetForeGroundWindow
  • 刚刚尝试过,但没有成功
  • 问题是我将通知显示为来自不同线程的对话框,然后是 UI 线程,如果我将 ShowDialog 移动到 UI 线程一切都很好,但这样我会阻止用户交互.. . :(

标签: c# windows forms topmost


【解决方案1】:
NameOfYourWindow myTopForm = new NameOfYourWindow();

myTopForm.Owner = App.Current.MainWindow;
myTopForm.ShowInTaskbar = false;
myTopForm.TopMost = true;
myTopForm.ShowDialog();

【讨论】:

  • 不行,我的主人应该是全屏打开的浏览器应用
【解决方案2】:
#region SetForegroundWindow
    [DllImport("kernel32.dll", ExactSpelling = true)]
    public static extern IntPtr GetConsoleWindow();
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SetForegroundWindow(IntPtr hWnd);
    #endregion
     static void Main(string[] args)
    {
        while (true)
        {

            SetForegroundWindow(GetConsoleWindow());
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多