Fomularios saber si ya esta abierto.

05/08/2003 - 12:49 por Yolanda | Informe spam
Hola a todos

Me gustaría controlar que no pudierán abrir el mismo formulario varias veces

Un Saludo

Yolanda

Gracias por adelantado. a los pocos que siguen trabajando.

Preguntas similare

Leer las respuestas

#1 Venti
05/08/2003 - 23:07 | Informe spam
Verás Yolanada , esque estás creando el form en tiempo de ejecución cada vez
que apretas el boton. De todos modos yo vengo de visual basic 6 y utilizo
los forms de tal manera que pueda acceder a ellos desde cualquier sitio de
mi aplicación solo con añadirle el evento definstance.
No es un metodo muy purista pero es lo más práctico que he encontrado . si
te interesa puedes hacer la siguiente prueba. Crea un form en una aplicación
de prueba y llamale al form "form1.vb" despues sustituye el código
totalmente por el siguiente y a partir de este momento podras acceder a
todos los eventos de form 1con solo añadir el siguiente codigo
Form1.Definstance.Eleventoque tu quieras Saludos :
Option Strict Off

Option Explicit On

Friend Class Form1

Inherits System.Windows.Forms.Form

#Region "Código generado por el Diseñador de Windows Forms "

Public Sub New()

MyBase.New()

If m_vb6FormDefInstance Is Nothing Then

If m_InitializingDefInstance Then

m_vb6FormDefInstance = Me

Else

Try

'Para el formulario de inicio, la primera instancia creada es la instancia
predeterminada.

If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType
Is Me.GetType Then

m_vb6FormDefInstance = Me

End If

Catch

End Try

End If

End If

'El Diseñador de Windows Forms requiere esta llamada.

InitializeComponent()

End Sub

'Form reemplaza a Dispose para limpiar la lista de componentes.

Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean)

If Disposing Then

If Not components Is Nothing Then

components.Dispose()

End If

End If

MyBase.Dispose(Disposing)

End Sub

'Requerido por el Diseñador de Windows Forms

Private components As System.ComponentModel.IContainer

Public ToolTip1 As System.Windows.Forms.ToolTip

'NOTA: el siguiente procedimiento es necesario para el Diseñador de Windows
Forms

'Se puede modificar mediante el Diseñador de Windows Forms.

'No lo modifique con el editor de código.

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Dim resources As System.Resources.ResourceManager = New
System.Resources.ResourceManager(GetType(Form1))

Me.components = New System.ComponentModel.Container()

Me.ToolTip1 = New System.Windows.Forms.ToolTip(components)

Me.ToolTip1.Active = True

Me.Text = "Form1"

Me.ClientSize = New System.Drawing.Size(312, 206)

Me.Location = New System.Drawing.Point(4, 30)

Me.StartPosition System.Windows.Forms.FormStartPosition.WindowsDefaultLocation

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.BackColor = System.Drawing.SystemColors.Control

Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable

Me.ControlBox = True

Me.Enabled = True

Me.KeyPreview = False

Me.MaximizeBox = True

Me.MinimizeBox = True

Me.Cursor = System.Windows.Forms.Cursors.Default

Me.RightToLeft = System.Windows.Forms.RightToLeft.No

Me.ShowInTaskbar = True

Me.HelpButton = False

Me.WindowState = System.Windows.Forms.FormWindowState.Normal

Me.Name = "Form1"

End Sub

#End Region

#Region "Soporte para la actualización "

Private Shared m_vb6FormDefInstance As Form1

Private Shared m_InitializingDefInstance As Boolean

Public Shared Property DefInstance() As Form1

Get

If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed
Then

m_InitializingDefInstance = True

m_vb6FormDefInstance = New Form1()

m_InitializingDefInstance = False

End If

DefInstance = m_vb6FormDefInstance

End Get

Set

m_vb6FormDefInstance = Value

End Set

End Property

#End Region

End Class

"Yolanda" escribió en el mensaje
news:
Perdona Venti
Pero esa función o propiedad no me aparece
Desde un formulario al apretar un botón ejecuto esto.
y al apretarlo otra vez vuelve a abrirmelo.

¿Como puedo saber si ya lo tengo abierto?
Dim frm As New FrmRptPedidosCli()
frm.ShowDialog()



"Venti" <venti[[]]@terra.es> escribió en el mensaje
news:AsNXa.953081$
> Hola Prueba el evento del formulario "visible"
> If Form2.definstance.visible=true Then
> Msgbox("Esta abierto")
> Else
> Msgbox("Esta cerrado")
> end if
> Saludos
> "Yolanda" escribió en el mensaje
> news:u%
> > Hola a todos
> >
> > Me gustaría controlar que no pudierán abrir el mismo formulario varias
> veces
> >
> > Un Saludo
> >
> > Yolanda
> >
> > Gracias por adelantado. a los pocos que siguen trabajando.
> >
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#2 Diego F.
06/08/2003 - 12:16 | Informe spam
Así sobre la marcha se me ocurre que como al fin y al cabo tienes una clase,
podrías declarar una variable static de tipo int por ejemplo y en el
constructor del formulario consultarla para saber cuántas instancias de la
clase se han creado.


Saludos,

Diego F.

"Yolanda" escribió en el mensaje
news:u%
Hola a todos

Me gustaría controlar que no pudierán abrir el mismo formulario varias


veces

Un Saludo

Yolanda

Gracias por adelantado. a los pocos que siguen trabajando.




Respuesta Responder a este mensaje
#3 Micky
07/08/2003 - 10:56 | Informe spam
Si usas vb6 ¿que haces contestando a preguntas
sobre .NET?. Las respuestas que estas dando no funcionan
en .NET y en vez de ayudar solo consigues confundir.

Tirón de orejas para tí... (no te lo tomes a mal, supongo
que tu intención era buena) ;)

Saludos.
Micky.

Verás Yolanada , esque estás creando el form en tiempo


de ejecución cada vez
que apretas el boton. De todos modos yo vengo de visual


basic 6 y utilizo
los forms de tal manera que pueda acceder a ellos desde


cualquier sitio de
mi aplicación solo con añadirle el evento definstance.
No es un metodo muy purista pero es lo más práctico que


he encontrado . si
te interesa puedes hacer la siguiente prueba. Crea un


form en una aplicación
de prueba y llamale al form "form1.vb" despues sustituye


el código
totalmente por el siguiente y a partir de este momento


podras acceder a
todos los eventos de form 1con solo añadir el siguiente


codigo
Form1.Definstance.Eleventoque tu quieras Saludos :
Option Strict Off

Option Explicit On

Friend Class Form1

Inherits System.Windows.Forms.Form

#Region "Código generado por el Diseñador de Windows


Forms "

Public Sub New()

MyBase.New()

If m_vb6FormDefInstance Is Nothing Then

If m_InitializingDefInstance Then

m_vb6FormDefInstance = Me

Else

Try

'Para el formulario de inicio, la primera instancia


creada es la instancia
predeterminada.

If


System.Reflection.Assembly.GetExecutingAssembly.EntryPoint
.DeclaringType
Is Me.GetType Then

m_vb6FormDefInstance = Me

End If

Catch

End Try

End If

End If

'El Diseñador de Windows Forms requiere esta llamada.

InitializeComponent()

End Sub

'Form reemplaza a Dispose para limpiar la lista de


componentes.

Protected Overloads Overrides Sub Dispose(ByVal


Disposing As Boolean)

If Disposing Then

If Not components Is Nothing Then

components.Dispose()

End If

End If

MyBase.Dispose(Disposing)

End Sub

'Requerido por el Diseñador de Windows Forms

Private components As System.ComponentModel.IContainer

Public ToolTip1 As System.Windows.Forms.ToolTip

'NOTA: el siguiente procedimiento es necesario para el


Diseñador de Windows
Forms

'Se puede modificar mediante el Diseñador de Windows


Forms.

'No lo modifique con el editor de código.

<System.Diagnostics.DebuggerStepThrough()> Private Sub


InitializeComponent()

Dim resources As System.Resources.ResourceManager = New
System.Resources.ResourceManager(GetType(Form1))

Me.components = New System.ComponentModel.Container()

Me.ToolTip1 = New System.Windows.Forms.ToolTip


(components)

Me.ToolTip1.Active = True

Me.Text = "Form1"

Me.ClientSize = New System.Drawing.Size(312, 206)

Me.Location = New System.Drawing.Point(4, 30)

Me.StartPosition >System.Windows.Forms.FormStartPosition.WindowsDefaultLoca


tion

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.BackColor = System.Drawing.SystemColors.Control

Me.FormBorderStyle =


System.Windows.Forms.FormBorderStyle.Sizable

Me.ControlBox = True

Me.Enabled = True

Me.KeyPreview = False

Me.MaximizeBox = True

Me.MinimizeBox = True

Me.Cursor = System.Windows.Forms.Cursors.Default

Me.RightToLeft = System.Windows.Forms.RightToLeft.No

Me.ShowInTaskbar = True

Me.HelpButton = False

Me.WindowState =


System.Windows.Forms.FormWindowState.Normal

Me.Name = "Form1"

End Sub

#End Region

#Region "Soporte para la actualización "

Private Shared m_vb6FormDefInstance As Form1

Private Shared m_InitializingDefInstance As Boolean

Public Shared Property DefInstance() As Form1

Get

If m_vb6FormDefInstance Is Nothing OrElse


m_vb6FormDefInstance.IsDisposed
Then

m_InitializingDefInstance = True

m_vb6FormDefInstance = New Form1()

m_InitializingDefInstance = False

End If

DefInstance = m_vb6FormDefInstance

End Get

Set

m_vb6FormDefInstance = Value

End Set

End Property

#End Region

End Class

"Yolanda" escribió en el


mensaje
news:
Perdona Venti
Pero esa función o propiedad no me aparece
Desde un formulario al apretar un botón ejecuto esto.
y al apretarlo otra vez vuelve a abrirmelo.

¿Como puedo saber si ya lo tengo abierto?
Dim frm As New FrmRptPedidosCli()
frm.ShowDialog()



"Venti" <venti[[]]@terra.es> escribió en el mensaje
news:AsNXa.953081$
> Hola Prueba el evento del formulario "visible"
> If Form2.definstance.visible=true Then
> Msgbox("Esta abierto")
> Else
> Msgbox("Esta cerrado")
> end if
> Saludos
> "Yolanda" escribió en el




mensaje
> news:u%
> > Hola a todos
> >
> > Me gustaría controlar que no pudierán abrir el




mismo formulario varias
> veces
> >
> > Un Saludo
> >
> > Yolanda
> >
> > Gracias por adelantado. a los pocos que siguen




trabajando.
> >
> >
> >
> >
>
>






.

Respuesta Responder a este mensaje
#4 micky
07/08/2003 - 11:09 | Informe spam
En .NET no existe el concepto de 'instancia por defecto',
así que no es tan sencillo saber si un formulario está
abierto.

Una solución es implementar en el form una variable
shared que indique si se ha creado una instancia. Algo
así...

public shared EstaAbierto as boolean = false

y modificarla en los eventos Load y Closing del form...

public sub MiForm_Load( ... etc
EstaAbierto = true

public sub MiForm_Closing( ... etc
EstaAbierto = false

luego antes de crear una nueva instancia y mostrar el
form puedes comprobar si esta o no abierto...

dim f as MiForm
if not MiForm.EstaAbierto then
f = new MiForm()
f.show()
endif

Otra solución es crear el form conforme al patrón de
instancia única. Es un poco más complejo, pero es una
solución estandar muy probada. Si necesitas información
sobre patrones, avisame.

Saludos.
Micky.

Verás Yolanada , esque estás creando el form en tiempo


de ejecución cada vez
que apretas el boton. De todos modos yo vengo de visual


basic 6 y utilizo
los forms de tal manera que pueda acceder a ellos desde


cualquier sitio de
mi aplicación solo con añadirle el evento definstance.
No es un metodo muy purista pero es lo más práctico que


he encontrado . si
te interesa puedes hacer la siguiente prueba. Crea un


form en una aplicación
de prueba y llamale al form "form1.vb" despues sustituye


el código
totalmente por el siguiente y a partir de este momento


podras acceder a
todos los eventos de form 1con solo añadir el siguiente


codigo
Form1.Definstance.Eleventoque tu quieras Saludos :
Option Strict Off

Option Explicit On

Friend Class Form1

Inherits System.Windows.Forms.Form

#Region "Código generado por el Diseñador de Windows


Forms "

Public Sub New()

MyBase.New()

If m_vb6FormDefInstance Is Nothing Then

If m_InitializingDefInstance Then

m_vb6FormDefInstance = Me

Else

Try

'Para el formulario de inicio, la primera instancia


creada es la instancia
predeterminada.

If


System.Reflection.Assembly.GetExecutingAssembly.EntryPoint
.DeclaringType
Is Me.GetType Then

m_vb6FormDefInstance = Me

End If

Catch

End Try

End If

End If

'El Diseñador de Windows Forms requiere esta llamada.

InitializeComponent()

End Sub

'Form reemplaza a Dispose para limpiar la lista de


componentes.

Protected Overloads Overrides Sub Dispose(ByVal


Disposing As Boolean)

If Disposing Then

If Not components Is Nothing Then

components.Dispose()

End If

End If

MyBase.Dispose(Disposing)

End Sub

'Requerido por el Diseñador de Windows Forms

Private components As System.ComponentModel.IContainer

Public ToolTip1 As System.Windows.Forms.ToolTip

'NOTA: el siguiente procedimiento es necesario para el


Diseñador de Windows
Forms

'Se puede modificar mediante el Diseñador de Windows


Forms.

'No lo modifique con el editor de código.

<System.Diagnostics.DebuggerStepThrough()> Private Sub


InitializeComponent()

Dim resources As System.Resources.ResourceManager = New
System.Resources.ResourceManager(GetType(Form1))

Me.components = New System.ComponentModel.Container()

Me.ToolTip1 = New System.Windows.Forms.ToolTip


(components)

Me.ToolTip1.Active = True

Me.Text = "Form1"

Me.ClientSize = New System.Drawing.Size(312, 206)

Me.Location = New System.Drawing.Point(4, 30)

Me.StartPosition >System.Windows.Forms.FormStartPosition.WindowsDefaultLoca


tion

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.BackColor = System.Drawing.SystemColors.Control

Me.FormBorderStyle =


System.Windows.Forms.FormBorderStyle.Sizable

Me.ControlBox = True

Me.Enabled = True

Me.KeyPreview = False

Me.MaximizeBox = True

Me.MinimizeBox = True

Me.Cursor = System.Windows.Forms.Cursors.Default

Me.RightToLeft = System.Windows.Forms.RightToLeft.No

Me.ShowInTaskbar = True

Me.HelpButton = False

Me.WindowState =


System.Windows.Forms.FormWindowState.Normal

Me.Name = "Form1"

End Sub

#End Region

#Region "Soporte para la actualización "

Private Shared m_vb6FormDefInstance As Form1

Private Shared m_InitializingDefInstance As Boolean

Public Shared Property DefInstance() As Form1

Get

If m_vb6FormDefInstance Is Nothing OrElse


m_vb6FormDefInstance.IsDisposed
Then

m_InitializingDefInstance = True

m_vb6FormDefInstance = New Form1()

m_InitializingDefInstance = False

End If

DefInstance = m_vb6FormDefInstance

End Get

Set

m_vb6FormDefInstance = Value

End Set

End Property

#End Region

End Class

"Yolanda" escribió en el


mensaje
news:
Perdona Venti
Pero esa función o propiedad no me aparece
Desde un formulario al apretar un botón ejecuto esto.
y al apretarlo otra vez vuelve a abrirmelo.

¿Como puedo saber si ya lo tengo abierto?
Dim frm As New FrmRptPedidosCli()
frm.ShowDialog()



"Venti" <venti[[]]@terra.es> escribió en el mensaje
news:AsNXa.953081$
> Hola Prueba el evento del formulario "visible"
> If Form2.definstance.visible=true Then
> Msgbox("Esta abierto")
> Else
> Msgbox("Esta cerrado")
> end if
> Saludos
> "Yolanda" escribió en el




mensaje
> news:u%
> > Hola a todos
> >
> > Me gustaría controlar que no pudierán abrir el




mismo formulario varias
> veces
> >
> > Un Saludo
> >
> > Yolanda
> >
> > Gracias por adelantado. a los pocos que siguen




trabajando.
> >
> >
> >
> >
>
>






.

Respuesta Responder a este mensaje
#5 venti
07/08/2003 - 16:57 | Informe spam
Si usas vb6 ¿que haces contestando a preguntas
sobre .NET?. Las respuestas que estas dando no funcionan
en .NET y en vez de ayudar solo consigues confundir.



_____________________________________________________
A ver si nos leemos los posts detenidamente antes de
contestar frivolamente.
Veamos, Llevo utilizando Visual Studio 2002 desde que
salió en españa la version oficial osea mas de un año y
ahora utilizo la version 2003. El hecho de decir vengo de
VB6 significa que vengo , no que estoy.
_____________________________________________________
Tirón de orejas para tí... (no te lo tomes a mal,


supongo
_____________________________________________________
Tirón de orejas para tí... (no te lo tomes a mal, supongo
.
_____________________________________________________
Por otro lado , algo que debí decir para aclarar mas lo
que expuse y que no hice por no explayarme demasiado,
esque la solución que le dí no es más que fruto de
actualizar un form hecho en VB6 a Vs 200x, que para
determinado tipo de gente como yo que no vamos
pontificando por las news sobre el sexo de los angeles es
algo que puede resultar (como así fué para mi)
tremendamente practico.
Para un Newbie como todabía me considero yo , el hecho de
llamar a un form desde cualquier lugar de mi aplicación a
todos y cada uno de sus eventos , puede resultar
Espero haberme explicado mejor y no molestar a nadie
Saludos
que tu intención era buena) ;)

Saludos.
Micky.

Verás Yolanada , esque estás creando el form en tiempo


de ejecución cada vez
que apretas el boton. De todos modos yo vengo de visual


basic 6 y utilizo
los forms de tal manera que pueda acceder a ellos desde


cualquier sitio de
mi aplicación solo con añadirle el evento definstance.
No es un metodo muy purista pero es lo más práctico que


he encontrado . si
te interesa puedes hacer la siguiente prueba. Crea un


form en una aplicación
de prueba y llamale al form "form1.vb" despues




sustituye
el código
totalmente por el siguiente y a partir de este momento


podras acceder a
todos los eventos de form 1con solo añadir el




siguiente
codigo
Form1.Definstance.Eleventoque tu quieras Saludos :
Option Strict Off

Option Explicit On

Friend Class Form1

Inherits System.Windows.Forms.Form

#Region "Código generado por el Diseñador de Windows


Forms "

Public Sub New()

MyBase.New()

If m_vb6FormDefInstance Is Nothing Then

If m_InitializingDefInstance Then

m_vb6FormDefInstance = Me

Else

Try

'Para el formulario de inicio, la primera instancia


creada es la instancia
predeterminada.

If


System.Reflection.Assembly.GetExecutingAssembly.EntryPoin


t
..DeclaringType
Is Me.GetType Then

m_vb6FormDefInstance = Me

End If

Catch

End Try

End If

End If

'El Diseñador de Windows Forms requiere esta llamada.

InitializeComponent()

End Sub

'Form reemplaza a Dispose para limpiar la lista de


componentes.

Protected Overloads Overrides Sub Dispose(ByVal


Disposing As Boolean)

If Disposing Then

If Not components Is Nothing Then

components.Dispose()

End If

End If

MyBase.Dispose(Disposing)

End Sub

'Requerido por el Diseñador de Windows Forms

Private components As System.ComponentModel.IContainer

Public ToolTip1 As System.Windows.Forms.ToolTip

'NOTA: el siguiente procedimiento es necesario para el


Diseñador de Windows
Forms

'Se puede modificar mediante el Diseñador de Windows


Forms.

'No lo modifique con el editor de código.

<System.Diagnostics.DebuggerStepThrough()> Private Sub


InitializeComponent()

Dim resources As System.Resources.ResourceManager = New
System.Resources.ResourceManager(GetType(Form1))

Me.components = New System.ComponentModel.Container()

Me.ToolTip1 = New System.Windows.Forms.ToolTip


(components)

Me.ToolTip1.Active = True

Me.Text = "Form1"

Me.ClientSize = New System.Drawing.Size(312, 206)

Me.Location = New System.Drawing.Point(4, 30)

Me.StartPosition >>System.Windows.Forms.FormStartPosition.WindowsDefaultLoc




a
tion

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.BackColor = System.Drawing.SystemColors.Control

Me.FormBorderStyle =


System.Windows.Forms.FormBorderStyle.Sizable

Me.ControlBox = True

Me.Enabled = True

Me.KeyPreview = False

Me.MaximizeBox = True

Me.MinimizeBox = True

Me.Cursor = System.Windows.Forms.Cursors.Default

Me.RightToLeft = System.Windows.Forms.RightToLeft.No

Me.ShowInTaskbar = True

Me.HelpButton = False

Me.WindowState =


System.Windows.Forms.FormWindowState.Normal

Me.Name = "Form1"

End Sub

#End Region

#Region "Soporte para la actualización "

Private Shared m_vb6FormDefInstance As Form1

Private Shared m_InitializingDefInstance As Boolean

Public Shared Property DefInstance() As Form1

Get

If m_vb6FormDefInstance Is Nothing OrElse


m_vb6FormDefInstance.IsDisposed
Then

m_InitializingDefInstance = True

m_vb6FormDefInstance = New Form1()

m_InitializingDefInstance = False

End If

DefInstance = m_vb6FormDefInstance

End Get

Set

m_vb6FormDefInstance = Value

End Set

End Property

#End Region

End Class

"Yolanda" escribió en el


mensaje
news:
Perdona Venti
Pero esa función o propiedad no me aparece
Desde un formulario al apretar un botón ejecuto esto.
y al apretarlo otra vez vuelve a abrirmelo.

¿Como puedo saber si ya lo tengo abierto?
Dim frm As New FrmRptPedidosCli()
frm.ShowDialog()



"Venti" <venti[[]]@terra.es> escribió en el mensaje
news:AsNXa.953081$
> Hola Prueba el evento del formulario "visible"
> If Form2.definstance.visible=true Then
> Msgbox("Esta abierto")
> Else
> Msgbox("Esta cerrado")
> end if
> Saludos
> "Yolanda" escribió en el




mensaje
> news:u%
> > Hola a todos
> >
> > Me gustaría controlar que no pudierán abrir el




mismo formulario varias
> veces
> >
> > Un Saludo
> >
> > Yolanda
> >
> > Gracias por adelantado. a los pocos que siguen




trabajando.
> >
> >
> >
> >
>
>






.



.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida