VB.net вывести окно на передний план - PullRequest
10 голосов
/ 18 июля 2011

Какой код в VB.net 2010 мне нужно установить, чтобы окно выходило в переднюю часть экрана.

Я пытаюсь отобразить тип срочного оповещения, его форму, по некоторым причинам я не использую окно сообщения.

Кто-то предложил следующий код, но он не работает:

  Private Sub frmMessage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.BringToFront()
    End Sub

Ответы [ 20 ]

20 голосов
/ 18 июля 2011

Должно быть достаточно, чтобы вы установили свойство TopMost окна, которое вам нужно получить поверх других.

Form.TopMost = True

11 голосов
/ 18 июля 2011

попробуй

me.Activate()

Это уловка

РЕДАКТИРОВАТЬ: Я погуглил, чтобы найти резервную копию для моего ответа

Мой случай

EDIT2:

Кажется, что есть несколько вещей, которые работают.Выше, а также

''depending on setup
Me.Show
Form2.Show()

также

Form2.ShowDialog()

также

Form2.Visible = True
7 голосов
/ 18 июля 2011
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As IntPtr
End Function

<DllImport("user32.dll")> _
Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

Теперь возьмите название окна, которое вы хотите вывести на передний план, и сделайте следующее:

string name = "Untitled - Notepad";
IntPtr ptr = FindWindow(null, name);
SetForegroundWindow(ptr);

Это выведет окно на переднюю часть экрана.

3 голосов
/ 18 июля 2011

Попробуйте использовать событие .Shown . Вот код для теста трех форм. В конце события нажатия кнопки форма Form3 должна быть сверху формы Form2, поверх формы Form1.

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.SendToBack()
        Dim f2 As New Form2
        f2.Show()
        Dim f3 As New Form3
        f3.Show()
    End Sub
End Class

Public Class Form2
    Private Sub Form2_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        Me.BringToFront()
    End Sub
End Class

Public Class Form3
    Private Sub Form3_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        Me.BringToFront()
    End Sub
End Class
1 голос
/ 11 мая 2016

Вывести окно вперед, откуда?

MDI

В MDI с несколькими формами будет достаточно form.BringToFront(), это переместит форму сверху в вашем приложении. Вы также можете использовать метод form.ShowDialog() при отображении предупреждения / ошибки.

Desktop

На вашем рабочем столе может быть несколько приложений, лучше перейдите к настройке приложения в качестве TopMost.

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

Чтобы вывести application на передний план, вам потребуется дополнительная работа, это «расширения» класса «form», поэтому использование будет: form.MakeTopMost():

<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function

Private ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private ReadOnly HWND_NOTOPMOST As New IntPtr(-2)

<System.Runtime.CompilerServices.Extension()> _
Public Sub MakeTopMost(frm As Form)
    SetWindowPos(frm.Handle(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

<System.Runtime.CompilerServices.Extension()> _
Public Sub MakeNormal(frm As Form)
    SetWindowPos(frm.Handle(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

как всегда, код расширения должен быть в отдельном модуле.

0 голосов
/ 30 апреля 2016

Мне показалось, что проще всего вызвать форму под названием «Проекты» после выбора пункта меню.Форма будет загружена при необходимости, при необходимости сведена к минимуму и выведена на передний план («фокус»).

Private Sub ProjectsToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ProjectsToolStripMenuItem1.Click

    Me.Cursor = Cursors.WaitCursor       ' if form is slow to load for any reason
    Projects.Show()
    Me.Cursor = Cursors.Default
    Projects.WindowState = FormWindowState.Normal
    Projects.Focus()

End Sub
0 голосов
/ 11 ноября 2015

Взять то, что сказал Джим Нолан, основываясь на его описании.Это лучший способ сделать так, чтобы форма правильно находилась перед всеми остальными формами, а также решать вопрос об удалении формы, назначении владельца новой формы и показе формы

Dim form As Form = new Form
form.TopMost = True
form.Owner = Me
form.ShowDialog()
form.Dispose()
0 голосов
/ 15 августа 2015

Я решил это таким образом (может пригодиться кому-то) - таким образом, он выводит скрытую форму на передний план даже в режиме отладки:

Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
    If Me.WindowState = FormWindowState.Minimized Then
        HideForm()
    Else
        BringFormToFront()
    End If
End Sub


Private Sub NotifyIcon_Click(sender As Object, e As EventArgs) Handles NotifyIcon.Click
    'Determine which mouse button was pressed, in order to differentiate between Left/Right Mouse Button
    Dim MouseButton As System.Windows.Forms.MouseEventArgs = CType(e, MouseEventArgs)
    If MouseButton.Button = MouseButtons.Left Then
        BringFormToFront()
    End If
End Sub

Private Sub NotifyIcon_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIcon.DoubleClick
    BringFormToFront()
End Sub

Private Sub HideForm()
    Me.NotifyIcon.Visible = True
    Me.ShowInTaskbar = False
    'Windowstate controlled by user when minimizing Form
   Msgbox("Minimized, click on Notify Icon to show")
End Sub

Private Sub BringFormToFront()
    Me.NotifyIcon.Visible = False
    Me.ShowInTaskbar = True
    Me.WindowState = FormWindowState.Normal
End Sub
0 голосов
/ 15 января 2015

Немного от ОП ... У меня есть "панель инструментов", которую я открываю из меню.Пользователь может переключиться на другие окна, а затем снова «загрузить» панель управления.Если он уже загружен, он переносится на передний план.

Объявление frmFISDash = frmFISDashboard "global"

    If frmFISDash Is Nothing Then
        frmFISDash = New frmFISDashboard
        frmFISDash.Show()
    Else
        frmFISDash.WindowState = FormWindowState.Normal
        frmFISDash.BringToFront()
    End If

Обратите внимание на настройку .WindowsState - если форма свернута .bringToFront неработа.

0 голосов
/ 11 января 2015

Я знаю, что это немного старо, но у меня была похожая проблема сегодня, вот как я решил ее. Он работает до тех пор, пока вы не против закрыть открытую форму и создать новую.

 Dim MyRemoteForm As New Form
    MyRemoteForm = Application.OpenForms("frmManualRemote")
    If MyRemoteForm Is Nothing Then
        frmManualRemote.Show()
    Else
        frmManualRemote.Close()
        frmManualRemote.Show()
    End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...