2012-06-07 2 views
2

Есть ли способ, позволяющий форме мигать, как ShowDialog, когда он теряет фокус?эффект переориентации showdialog пользовательский вызов

Когда вы вызываете ShowDialog в форме окна и вы пытаетесь выполнить другое действие, форма начинает мигать в течение нескольких секунд, а затем фокусируется.

Есть ли способ вызвать это мигающее действие по-своему?

+0

У вас есть собственная пользовательская форма, которую вы показываете, и вы хотите, чтобы она мигала? Не могли бы вы что-то сделать в событии Deactivate, чтобы установить свойство Visible в несколько раз в цикле. –

ответ

3

Попробуйте это.

[DllImport("user32.dll")] 
    private static extern Int32 FlashWindowEx(ref FLASHWINFO pwfi); 

    [StructLayout(LayoutKind.Sequential)] 
    private struct FLASHWINFO { 
     public UInt32 cbSize; 
     public IntPtr hwnd; 
     public FLASHW dwFlags; 
     public UInt32 uCount; 
     public Int32 dwTimeout; 
    } 

    [Flags] 
    private enum FLASHW: int { 
     // stop flashing 
     FLASHW_STOP = 0x00, 
     // flash the window title 
     FLASHW_CAPTION = 0x01, 
     // flash the taskbar button 
     FLASHW_TRAY = 0x02, 
     // flash the window title and the taskbar button 
     FLASHW_ALL = 0x03, 
     // flash continuously 
     FLASHW_TIMER = 0x04, 
     // flash until the window comes to the foreground 
     FLASHW_TIMERNOFG = 0x0c, 
    } 

    public static void FlashWindow(IWin32Window form, int count) { 
     FLASHWINFO pwfi = new FLASHWINFO(); 
     pwfi.cbSize = (uint)Marshal.SizeOf(pwfi); 
     pwfi.dwFlags = FLASHW.FLASHW_ALL; 
     pwfi.dwTimeout = 0; 
     pwfi.hwnd = form.Handle; 
     pwfi.uCount = (uint)count; 
     FlashWindowEx(ref pwfi); 
    } 

Продлить его для ваших нужд.

+0

Вы это как вспышка шоудиалога? –

+0

Строка FLASHW.FLASHW_ALL сообщает, чтобы мигать строка заголовка формы, а также кнопка панели задач. Используйте FLASHW_CAPTION или FLASHW_TRAY, чтобы их разжечь. Просто попробуйте. – joe

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