visual veces saber que formularios formulario evitar esta detectar como activo abra abiertos abierto vb.net

vb.net - veces - formulario activo vb6



Comprobar si el formulario está abierto (8)

Como una extensión de las respuestas dadas (gracias, todas), aquí hay una forma sencilla de activar o mostrar:

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

Doy esta pregunta para más conocimiento. ¿Cómo puedo saber si el formulario está abierto en mi aplicación o no, para no abrirlo de nuevo, no quiero crear una instancia del mismo formulario mientras se está ejecutando?

Dim frmCollection As New FormCollection() frmCollection = Application.OpenForms() If frmCollection.Item("Form2").IsHandleCreated Then MsgBox("Yes Opened") Else Dim f As New Form2() With f .Text = "form2" .Show() End With End If

Si ejecuto este código muchas veces, se crearán más instancias del formulario Form2. ¿Cómo puedo verificar si este formulario aún no está abierto?


OTRA forma de refactorización de la iniciada por 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


Odio ser una alegría mortal, pero algún día alguien intentará entender su código.

Dim frm as New frmDontknow Dim frmCollection = System.Windows.Forms.Application.OpenForms For i As Int16 = 0I To frmCollection.Count - 1I If frmCollection.Item(i).Name = frm.Name Then frmCollection.Item(i).Activate() Exit Sub End If Next i

Entonces, ¿el show, etc., según sea necesario?


Para mayor simplicidad, puede crear una variable bool estática pública que le dirá si el formulario está abierto o no. En el evento de carga de formulario, asigne ''verdadero'' y en el evento cerrado asigne un valor ''falso''.


Puede utilizar el siguiente código:

If myForm.IsHandleCreated then myForm is open End If


Puedes intentarlo así:

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


Verifique si el formulario está abierto. Para validar si un formulario está abierto, usamos este método y función para poder invocar desde cualquier formulario y usar menos código.

Ejemplo: Esto lo usará en un formulario con mdiContainer y un objeto de panel con 3 botones que muestra el formulario de 3 ventanas.

Sistema de importaciones Sistema de importaciones. Reflexión

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

Cómo usar en eventos de clic Sub Privado btnRegistro_Click (remitente Como Objeto, e Como EventArgs) Maneja btnRegistro.Haga clic en 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

Aquí hay una imagen del código de muestra.


puedes probar esto

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