FormCollection в VB.NET - PullRequest
       13

FormCollection в VB.NET

3 голосов
/ 09 марта 2010

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

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 09 марта 2010

Вы можете попробовать:

'Pass the form object (you could also use string as the 
'parameter and replace the if condition to: "If form.Name.Equals(targetForm) Then")
Public Sub BringToFront(ByVal targetForm As Form)
    Dim form As Form
    For Each form In Application.OpenForms()
        If form Is targetForm Then
            form.BringToFront()
            Exit For
        End If
    Next
End Sub

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

BringToFront(targetformobject)
0 голосов
/ 09 марта 2010

У меня всегда P / Invoke код для вызова в user32 windows dll. Нечто подобное должно делать то, что вы хотите.

    <DllImport("user32.dll")> _
    Public Shared SetFocus(ByVal hwnd As IntPtr)

Private Sub SetFocusToExistingWindow()

    Dim procs As Process() = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)

    If procs.Length > 0 Then
      Dim hwnd As IntPtr = procs(0).MainWindowHandle
      SetFocus(hwnd)
    End If

End Sub
0 голосов
/ 09 марта 2010

Используйте свойство Application.OpenForms.

Использование LINQ:

Dim existingForm = Application.OpenForms.OfType(Of YourFormType)().FirstOrDefault()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...