2014-09-24 3 views
1

Я использую Message Box в небольшом инструменте Я кодирую в Visual Studio, который работает ежедневно и выводит информацию во всплывающее окно на моем рабочем столе. Однако, если у меня открыто другое окно, окно сообщения теряется за ним и может остаться незамеченным. Мне было интересно, есть ли способ гарантировать, что окно сообщения всегда отображается поверх всех других открытых настольных приложений. Кроме того, есть ли способ создать окно сообщения, которое не позволит мне делать что-либо еще на рабочем столе без предварительного выхода из окна сообщений? Например, я не могу открыть другое приложение поверх окна сообщения, пока окно сообщения не исчезнет.Windows Forms MessageBox

Заранее благодарим за любые предложения или альтернативы, которые у вас есть! Это мой первый раз, когда я использовал объект 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

1

MessageBox не имеет способа установить его как TopMost. Он будет отображаться поверх других форм в вашей собственной программе, но не обязательно поверх других программ.

Вы можете создать свой собственный Form и дизайн его выглядеть как MessageBox, затем установите TopMost свойство True. Это отобразит его поверх большинства окон.

Но это все еще не является гарантией. Если у вас запущено другое приложение, то также имеет материал, установленный на TopMost, тогда он не появится поверх них. Даже если были TopMoster и TopMostestest свойства ... ну ... несколько программ могли бы использовать их тоже.

В конце концов, на самом деле нет гарантии убедиться, что ваше окно появляется над всем остальным, что делает пользователь.

В качестве альтернативы, может быть, вы могли бы провести некоторое исследование класса NotifyIcon и отобразить сообщение во всплывающем шаре на панели задач? Это привлекло бы внимание, не прерывая того, что вы в середине.

Смежные вопросы