VB.Net и MB_TOPMOST для диалогов?

Если щелкнуть левой кнопкой мыши приложение, свернутое в системном трее и отображающее окно сообщений, диалоговое окно будет не в фокусе при первом отображении, в то время как во второй раз оно будет в фокусе.

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

Итак, я попробовал следующее с не-.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

Кто-нибудь нашел обходной путь?

Спасибо.


person Gulbahar    schedule 18.12.2013    source источник
comment
Вы решаете неправильную проблему. MB_TOPMOST не устраняет проблему с фокусом, окно сообщения уже находится поверх других окон. Просто нет фокуса. Ошибка Windows на самом деле.   -  person Hans Passant    schedule 18.12.2013
comment
Спасибо. Я посмотрю, как поставить фокус на диалог в первый раз.   -  person Gulbahar    schedule 18.12.2013
comment
Я совершенно уверен, что MsgBox также является окном сообщений .NET, это просто режим совместимости для кода VB6. Для не-.NET вам нужно будет использовать ссылку COM, операторы Declare или аналогичные.   -  person Neolisk    schedule 18.12.2013


Ответы (1)


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

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

Редактировать. Другой способ сделать это — создать временную форму.

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