2013-12-18 4 views
1

При щелчке левой кнопкой мыши приложение, сведенное к минимуму в systray и отображающее окно сообщения, диалог не отображается в фокусе при первом отображении, в то время как во второй раз он имеет фокус.VB.Net и MB_TOPMOST для диалогов?

Google, похоже, говорит, что решение заключается в настройке диалога с параметром MB_TOPMOST, но объект .Net MessageBox, похоже, не поддерживает этот параметр.

Так что я попытался следующие с non-.Net MsgBox, но это не решает проблему:

Public Class Form1 

    Private Sub LeftClick(sender As Object, e As EventArgs) Handles NotifyIcon1.Click 
     'Work-around to prevent Windows from triggering Click then right-click 
     Dim MyButton As System.Windows.Forms.MouseEventArgs = e 
     If MyButton.Button = MouseButtons.Left Then 

      'MessageBox apparently unable to handle MB_TOPMOST 
     'MessageBox.Show(Str, "Output", ????) 

      'Doesn't work 
     Const MB_TOPMOST As Integer = &H40000 
     MsgBox("Hello there", MsgBoxStyle.OkOnly Or MB_TOPMOST, "Out of focus") 

     End If 
    End Sub 
End Class 

ли кто-то нашел работу вокруг?

спасибо.

+1

Вы решение неправильно проблема. MB_TOPMOST не исправляет проблему фокуса, окно сообщения уже находится поверх других окон. У него просто нет фокуса. Ошибка Windows afaik. –

+0

Спасибо. Я посмотрю, как перенести фокус на диалог в первый раз. – Gulbahar

+1

Я довольно положительный MsgBox также является текстовым сообщением .NET, это просто «режим совместимости» для кода VB6. Для не-NET вы должны использовать ссылку COM, инструкции 'Declare' или аналогичные. – Neolisk

ответ

0

Для этого вы можете использовать TOPMOST Достояние MsgBox (номер 262144)

MsgBox("Hello there", 262144, Title:="Out of focus") 

Edit: Еще один способ для достижения этой цели является создание временной формы

Using form = New Form() With {.TopMost = True} 
    MessageBox.Show(form, "Hello there", "Out of focus") 
End Using