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
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