2009-08-21 38 views
3

什麼是強大的方式來強制窗體帶來所有其他應用程序使用Windows C#應用程序的前端?有什麼強大的方式來強制一個表單帶來前臺?

+2

我對你使用'強大'感興趣......你能推斷爲什麼你需要一個'強大'帶到前面,而不是普通的純正帶到前端? – jrista 2009-08-21 02:47:57

+8

我永遠不希望你的應用程序把自己帶到前面。這是我在窗戶上唯一的寵物狗。閃爍的任務欄,你想要的,但如果你把重點... – 2009-08-21 02:49:23

+0

@jrista,我用術語powefull因爲,我已經嘗試使用Topmost = true。但仍然有一些第三方應用程序正在壓倒這種形式,並且由於這種情況,我的表單仍然滯後。 – Anuya 2009-08-21 02:51:03

回答

1

使用SetWindowsPos()API函數

7

設置Form.TopMost爲true

+0

我已經嘗試使用Topmost = true。但仍然有一些第三方應用程序正在壓倒這種形式,並且由於這種情況,我的表單仍然滯後。 使用此表單的目的是阻止用戶查看其他應用程序。 – Anuya 2009-08-21 02:52:32

+1

那麼,以迴應關於其他應用程序覆蓋表單的聲明。也許你可以做一些研究來找出「如何覆蓋最頂層=真」或「如何覆蓋this.bringToFront();」在C#中...也許這就是這些第三方應用程序的做法。 我的邏輯是......如果你以同樣的方式去做 - 你應該能夠把你的表格帶到前面,因爲你也會壓倒他們。 – 2009-08-21 07:44:26

15

期大力迫使用戶點擊在任務欄應用程序窗口的圖標。

+0

不用,表格自動顯示以阻止用戶,所以它不需要任何點擊就可以自行完成, – Anuya 2009-08-21 02:54:22

+0

+1注意用戶友好的第1條原則! :D – jrista 2009-08-21 02:55:04

+0

+69我們都試圖解決這個問題幾個小時,謝謝。 – 2017-04-21 15:03:26

5

this.BringToFront();

它對我很好。

+0

這需要做成代碼(在標記中,我的意思是)。 – 2009-10-29 00:46:27

+0

感謝您的提醒。完成。 – 2009-10-29 01:01:15

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

    } 
} 
+1

糟糕。顯然,你會改變命名空間的名字。 – 2011-07-20 14:07:16

+0

這似乎是實際回答問題的少數答案之一,而不是用手指來回答問題。 – 2015-02-07 21:17:48

1

這個可能有用的一些詳細信息。我使用Charles Jenkins的答案,通過在form.load事件處理程序中調用「MakeTopMost」函數,使我的winforms應用程序成爲最頂級的應用程序。我需要這個功能,因爲我的winforms應用程序是由MSI安裝啓動的,Windows安裝程序進度條會顯示在最上面。

然而,這然後把主窗體放在主窗體想顯示的其他子窗體之上。爲了解決這個問題,我在form.shown事件處理函數中調用了我的函數MakeWindowNormal,以便將主窗體恢復爲正常窗口,因爲它已經加載並激活了,它現在位於Windows安裝程序進度條的前面(請參閱事件http://msdn.microsoft.com/en-us/library/86faxx0d(v=vs.110).aspx訂購)。這允許子窗體(和其他窗口,如果用戶移動它們)現在走在主窗體的前面。

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