2014-09-24 88 views
1

我在一個小工具中使用消息框,我在Visual Studio中進行編碼,每天運行並將信息輸出到桌面上的彈出窗口。但是,如果我打開另一個窗口,則消息框會丟失,並且可能不被注意。我想知道是否有任何方法可以確保消息框始終顯示在所有其他打開的桌面應用程序之上。另外,有沒有辦法創建一個消息框,不會讓我在沒有首先退出消息框的情況下在桌面上執行其他任何操作?例如,我不能在消息框頂部打開另一個應用程序,直到消息框消失。Windows窗體消息框

在此先感謝您的任何建議或替代方案!這是我第一次使用MessageBox對象,所以我對其功能的理解非常有限。

回答

2

如果你想保持你的窗體頂部與其他形式的在自己的應用大部分可以使用

MyForm.TopMost = true; 

否則,如果你想保持你的應用程序在其他窗口的頂部,你有Windows操作系統調用Win32函數。下面是一個示例

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

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); 
     static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); 
     static readonly IntPtr HWND_TOP = new IntPtr(0); 
     static readonly IntPtr HWND_BOTTOM = new IntPtr(1); 
     const UInt32 SWP_NOSIZE = 0x0001; 
     const UInt32 SWP_NOMOVE = 0x0002; 
     const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE; 

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

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); 
     } 
    } 
} 
+0

投票並接受答案,如果回答了您的問題 – Sam 2014-09-25 07:24:04

1

MessageBox沒有辦法將其設置爲TopMost。它會在您自己的程序中出現在其他表格之上,但不一定在其他程序之上。

你可以創建自己的Form,並設計出MessageBox,那麼TopMost屬性設置爲True。這將顯示在大多數窗口之上。

但它仍然不能保證。如果您運行的另一個應用程序東西設置爲TopMost,那麼它不會出現在這些之上。即使有TopMosterTopMostestest屬性......好吧......多個程序也可以使用這些屬性。

最後,確實沒有保證您的窗口顯示高於用戶正在做的一切。

作爲一種替代方案,也許你可以對NotifyIcon類做一些研究,並在任務欄的彈出氣球中顯示消息?這也會吸引注意力,而不會中斷任何你在中間的事情。