什么是迫使表格带来前沿的强大方式?

时间:2009-08-21 02:45:36

标签: c# windows

强制表单使用windows c#application强制表单引入所有其他应用程序的强大方法是什么?

6 个答案:

答案 0 :(得分:15)

强行强迫用户点击任务栏中的应用程序窗口图标。

答案 1 :(得分:7)

将Form.TopMost设置为true

答案 2 :(得分:6)

以下代码对我有用:

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

  }
}

答案 3 :(得分:5)

this.BringToFront();

对我有用。

答案 4 :(得分:1)

使用SetWindowsPos()api函数

答案 5 :(得分:1)

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

但是,然后将主窗体放在主窗体想要显示的其他子窗体的顶部。为了解决这个问题,我在form.shown事件处理程序中调用了我的函数MakeWindowNormal,将主窗体恢复为正常窗口,因为它现在位于Windows安装程序进度条前面,因为它已经加载并激活(参见{{3对于事件顺序)。这允许子表单(以及用户移动它们时的其他窗口)现在位于主表单的前面。

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