Visual Basic.NET - Problema de instancias al llamar a un formulario

 
Vista:
Imágen de perfil de Guillermo
Val: 64
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema de instancias al llamar a un formulario

Publicado por Guillermo (40 intervenciones) el 01/08/2020 04:03:23
Hola Compañeros, necesito su ayuda otra vez, jejeje...
Resulta que en el evento Keydown, llamo a un procedimiento que abre otro formulario para entrada de datos, así:

1
2
3
4
5
Private Sub frmPrincipal_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.A Then
        cmdEntrada.PerformClick() 'esto es un botón, que llama al otro formulario
    End If
End Sub

Luego de presionar la letra 'A', la ventana o formulario, se abren dos instancias, uno encima de otro, así:

ventanas

Mientras que haciendo clic con el ratón o mouse, se abre una sola instancia.

La llamada al formulario lo llamo así:
1
2
3
4
5
Private Sub cmdEntrada_Click(sender As Object, e As EventArgs) Handles cmdEntrada.Click
    Dim f As New frmEntraAuto
    f.ShowDialog()
    f.Dispose()
End Sub


Entonces, la pregunta es: ¿cómo se hace para que se abra una sola vez mediante teclado?
Muchas gracias a todos.
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
Imágen de perfil de Carlos
Val: 112
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema de instancias al llamar a un formulario

Publicado por Carlos (41 intervenciones) el 01/08/2020 09:48:19
Muy buenas:

Has pensado en preguntar si el Form ya está abierto y segun su respuesta ya sabes ..., este codigo que ter paso estaba en una respuesta de este foro

1
2
3
4
5
6
7
8
9
10
11
Private Function CheckForm(_form As Form) As Form
 
	For Each f As Form In Application.OpenForms
		If f.Name = _form.Name Then
			Return f
		End If
	Next
 
	Return Nothing
 
End Function
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

Problema de instancias al llamar a un formulario

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 02/08/2020 02:03:41
Eso se llama singleton que es una parte o forma parte del patrón singleton, para lo que necesitas es muy sencillo de hacer mas o menos así:

1
2
3
4
5
6
7
8
9
10
11
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim frm As Form = Application.OpenForms.Cast(Of Form)().FirstOrDefault(Function(x) TypeOf x Is Form2)
 
    If frm IsNot Nothing Then
        frm.BringToFront()
        Return
    End If
 
    frm = New Form2()
    frm.Show()
End Sub

Espero te 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
0
Comentar