Visual Basic.NET - Trabajar con varias ventanas

 
Vista:
Imágen de perfil de JOSE EMATEGUI

Trabajar con varias ventanas

Publicado por JOSE EMATEGUI (7 intervenciones) el 26/10/2016 03:17:45
Buenas,

trabajo en una aplicación que maneja una ventana principal y una secundaria.

Al dar click al botón Agenda en el form principal abre una nuevo form:

Private Sub btnAgenda_Click(sender As Object, e As EventArgs) Handles btnAgenda.Click

Dim agenda As New frmAgenda
agenda.Show()

End Sub

La pregunta es como hacer para que al volver a hacer click al botón llame al form agenda en lugar de abrir uno nuevo?

Muchas Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Trabajar con varias ventanas

Publicado por Miguel (476 intervenciones) el 26/10/2016 03:56:44
Crea el formulario como una variable global, y en tu botón verifica que esté creado y disponible, y lo muestras.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE EMATEGUI

Trabajar con varias ventanas

Publicado por JOSE EMATEGUI (7 intervenciones) el 26/10/2016 04:15:34
gracias miguel!! pero como harías eso??

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Trabajar con varias ventanas

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 27/10/2016 07:58:12
Eso es sencillo.

Hay 2 maneras de hacerlo, cada una para cada caso en particular.

Pero te dejo una muy sencilla

En el evento click de tu boton o menú pones esto:

1
2
3
4
5
6
7
8
Dim frm As Form = Me.MdiChildren.FirstOrDefault(Function(x) TypeOf x Is FrmAgenda)
If frm IsNot Nothing Then
	frm.BringToFront()
	Return
End If
frm = New FrmAgenda
frm.MdiParent = Me
frm.Show()


Listo, casi casi un patrón singleton.

Espero les sirva.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Trabajar con varias ventanas

Publicado por Nacho (56 intervenciones) el 27/10/2016 13:51:46
Si las ventanas no son mdi el procedimiento es idéntico, pero buscando los forms del FormsCollection del objeto Application.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de JOSE EMATEGUI

Trabajar con varias ventanas

Publicado por JOSE EMATEGUI (7 intervenciones) el 28/10/2016 16:00:27
Bueno, como no supe implementar lo del FormCollection, utilicé este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub btnAgenda_Click(sender As Object, e As EventArgs) Handles btnAgenda.Click
 
    Dim form As Form
    Opened = False
    For Each form In Application.OpenForms()
        If form.Text = "Agenda Semanal - Citas Expertise" Then
            form.WindowState = FormWindowState.Maximized
            Opened = True
            Exit For
        End If
    Next
    If Opened = False Then
        Dim frm As New frmAgenda
        frm.Show()
    End If
 
End Sub

Muchísimas gracias de nuevo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Trabajar con varias ventanas

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 29/10/2016 00:10:07
Hola que tal.

Vale cuando hay esfuerzo.

Te propongo esto:

1
2
3
4
5
6
7
Dim FAgenda As Form = Application.OpenForms.Cast(Of Form)().FirstOrDefault(Function(x) TypeOf x Is FrmAgenda)
If FAgenda IsNot Nothing Then
	FAgenda.BringToFront()
	Return
End If
FAgenda = New FrmAgenda
FAgenda.Show()

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de JOSE EMATEGUI

Trabajar con varias ventanas

Publicado por JOSE EMATEGUI (7 intervenciones) el 29/10/2016 23:06:52
Funcionó perfecto!! le hice un pequeño cambio ya que si la ventana que quería traer el frente estaba minimizada la misma no se veía.

1
2
3
4
5
6
7
Dim FAgenda As Form = Application.OpenForms.Cast(Of Form)().FirstOrDefault(Function(x) TypeOf x Is frmAgenda)
        If FAgenda IsNot Nothing Then
            FAgenda.WindowState = FormWindowState.Maximized
            Return
        End If
        FAgenda = New frmAgenda
        FAgenda.Show()


muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar