Check if form is Opened

前端 未结 8 1369
陌清茗
陌清茗 2020-12-30 23:56

I give this question for more knowledge. How can I know if the form is Opened in my application or not, in order not to open it again I mean not to create an instance of the

相关标签:
8条回答
  • 2020-12-31 00:17

    As an extension of the answers given (thank you, all), here's a simple way to activate or show:

    Dim frmCollection = System.Windows.Forms.Application.OpenForms
    If frmCollection.OfType(Of Form2).Any Then
        frmCollection.Item("Form2").Activate()
    Else
        Dim newForm2 = New Form2
        newForm2.Show()
    End If
    
    0 讨论(0)
  • 2020-12-31 00:26

    You can try it like this:

     Imports System.Linq ' need to add 
    
    
    If Application.OpenForms().OfType(Of Form2).Any Then
      MessageBox.Show("Opened")
    Else
      Dim f2 As New Form2
      f2.Text = "form2"
      f2.Show()
    End If
    
    0 讨论(0)
  • 2020-12-31 00:26

    You can use the following code:

    If myForm.IsHandleCreated then
       myForm is open
    End If
    
    0 讨论(0)
  • 2020-12-31 00:26

    ANOTHER refactoring way from the one initiated by HumbleBeginnings:

        Dim xChildWindows = Application.OpenForms.OfType(Of frmForm2)
        If xChildWindows.Any Then
            xChildWindows.First().Focus() 'Focus if exists
        Else
            Dim xfrmNew As New frmForm2() 'Open window if doeasn't exists
            xfrmNew.MdiParent = Me
            xfrmNew.Show()
        End If
    
    0 讨论(0)
  • 2020-12-31 00:29

    Check if form is Opened, To validate if a form is open we use this method and function to be able to invoke from any form and use less code.

    Example : This will use it in a form with mdiContainer and a panel object with 3 buttons that shows the 3 windows form.

    Imports System Imports System.Reflection

    Private Sub OpenWindowsForm(ByVal FormName As String)
        Dim instForm As Form = Application.OpenForms.OfType(Of Form)().Where(Function(frm) frm.Name = FormName).SingleOrDefault()
        If instForm Is Nothing Then
            Dim frm As New Form
            frm = DirectCast(CreateObjectInstance(FormName), Form)
            frm.MdiParent = Me
            Me.Panel1.Controls.Add(frm)
            Me.Panel1.Tag = frm
            frm.Show()
        Else
            instForm.Select()
            instForm.WindowState = FormWindowState.Maximized
            instForm.BringToFront()
        End If
    End Sub
    
    Public Function CreateObjectInstance(ByVal objectName As String) As Object
        Dim obj As Object
        Try
            If objectName.LastIndexOf(".") = -1 Then
                objectName = [Assembly].GetEntryAssembly.GetName.Name & "." & objectName
            End If
    
            obj = [Assembly].GetEntryAssembly.CreateInstance(objectName)
    
        Catch ex As Exception
            obj = Nothing
        End Try
        Return obj
    
    End Function
    

    How to use in click events Private Sub btnRegistro_Click(sender As Object, e As EventArgs) Handles btnRegistro.Click OpenWindowsForm("Registro") End Sub

    Private Sub btnBusqueda_Click(sender As Object, e As EventArgs) Handles btnBusqueda.Click
        OpenWindowsForm("Busqueda")
    End Sub
    
    Private Sub btnCalendario_Click_1(sender As Object, e As EventArgs) Handles btnCalendario.Click
        OpenWindowsForm("Calendario")
    End Sub
    

    Here is an image of the Sample code

    0 讨论(0)
  • 2020-12-31 00:30

    you can try this

    Dim formText As String
    Dim prevText As String
    
     Private Sub OpenForm(ByVal frm As Windows.Forms.Form)
            formText = frm.Text
            If formText = prevText Then Exit Sub
            CloseForms()
            ' Make it a child of this MDI form before showing it.
            frm.MdiParent = Me
            frm.Show()
            frm.Location = New Point(0, 0)
            prevText = formText
        End Sub
    
        Private Sub CloseForms()
            For Each ChildForm As Form In Me.MdiChildren
                ChildForm.Close()
            Next
        End Sub
    
        Private Sub NewToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PayablesToolStripMenuItem.Click
                OpenForm(frmPayables)
            End Sub
    
    0 讨论(0)
提交回复
热议问题