Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么是强大的方式来迫使一种形式的前面?_C#_Windows - Fatal编程技术网

C# 什么是强大的方式来迫使一种形式的前面?

C# 什么是强大的方式来迫使一种形式的前面?,c#,windows,C#,Windows,使用windows c#application强制窗体显示在所有其他应用程序前面的强大方法是什么?将form.TopMost设置为true强制用户单击任务栏中的应用程序窗口图标。this.BringToFront() 它对我很有用。使用SetWindowsPos()api函数以下是适用于我的代码: using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace LicenseMa

使用windows c#application强制窗体显示在所有其他应用程序前面的强大方法是什么?

将form.TopMost设置为true

强制用户单击任务栏中的应用程序窗口图标。

this.BringToFront()


它对我很有用。

使用SetWindowsPos()api函数

以下是适用于我的代码:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace LicenseManager {

  public static class WinApi {

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

    static private IntPtr HWND_TOPMOST = new IntPtr( -1 );

    private const uint SWP_NOSIZE = 0x0001;
    private const uint SWP_NOMOVE = 0x0002;

    static public void MakeTopMost( Form f ) {
      SetWindowPos( f.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
    }

  }
}

关于这一点的更多信息可能有用。我使用Charles Jenkins的答案,通过调用form.load事件处理程序中的“MakeTopMost”函数,使我的winforms应用程序成为顶级应用程序。我需要这个功能,因为我的winforms应用程序是由MSI安装启动的,Windows installer进度条会显示在顶部

但是,这会将主窗体置于主窗体希望显示的其他子窗体之上。为了解决这个问题,我在form.show事件处理程序中调用了函数MakeWindowNormal,将主窗体作为一个普通窗口放回Windows installer进度条前面,因为它已被加载并激活(请参阅事件顺序)。这允许子窗体(以及其他窗口,如果用户移动它们)现在位于主窗体的前面

static public void MakeWindowNormal(Form f)
{
    SetWindowPos(f.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}

我对你使用的“强大”很感兴趣……你能推断出为什么你需要一个“强大”的前台而不是一个普通的jane前台吗?我从来都不希望你的应用程序把自己推到前台。这是我最讨厌的窗户。你想眨一下任务栏就眨一下,但如果你集中注意力……我100%同意,丝般柔滑。Karthik,这正是那些第三方应用程序正在做的事情——为谁能登上榜首而奋斗,就像孩子们想要上铺一样。另一方面,用户越来越恼火,他们将不惜一切代价避免应用程序强制聚焦@卡思克:鉴于你最后的评论,我恭敬地拒绝回答。您试图违反编写用户友好应用程序的基本规则,而我不能凭良心提供会伤害数百万优秀最终用户的知识,他们将不可避免地对您的法西斯应用程序接管他们的个人计算机感到畏缩。那么打电话给LockWorkstation。我已经尝试使用topmest=true。但仍有一些第三方应用程序覆盖了此表单,因此我的表单将保留。使用此表单的目的是阻止用户查看其他应用程序。好吧,作为对其他应用程序覆盖表单声明的回应。也许您可以做一些研究,找出C#中的“如何重写Topmost=true”或“如何重写this.bringToFront()”。。。也许这些第三方应用程序就是这样做的。我的逻辑是。。。如果你和他们一样,你应该可以把你的表单放在最前面,因为你也会覆盖他们的表单。不,表单会自动显示以阻止用户,所以它不需要任何点击就可以自己完成,+69我们都被困在试图修复这个问题上好几个小时了,谢谢。哎呀。显然,您将更改名称空间的名称。这似乎是为数不多的几个答案之一,它们实际上是以书面形式回答问题,而不是摇动手指回答问题。