Foros del Web » Programación para mayores de 30 ;) » .NET »

VB .NET - Formularios de Interfaz Múltiple (MDI)

Estas en el tema de VB .NET - Formularios de Interfaz Múltiple (MDI) en el foro de .NET en Foros del Web. Buenas tardes, estoy comenzando a estudiar cómo se crea la Interfaz que engloba varios Formularios, conocido como "Formularios de Interfaz Múltiple" o MDI. La cuestión ...
  #1 (permalink)  
Antiguo 23/10/2008, 12:10
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Exclamación VB .NET - Formularios de Interfaz Múltiple (MDI)

Buenas tardes,

estoy comenzando a estudiar cómo se crea la Interfaz que engloba varios Formularios, conocido como "Formularios de Interfaz Múltiple" o MDI.

La cuestión es que estoy intentando hacer que sólo se pueda abrir un formulario a la vez.

La estructura de mi Proyecto es:
  • Form_Index
  • Form_Nuevo_Usuario
  • Form_Nuevo_Grupo

"Form_Index" es el Formulario que actua como Padre, mientras que "Form_Nuevo_Usuario" y "Form_Nuevo_Grupo" actuán como Hijos.

En "Form_Index", tengo este método:
Cita:
Private Sub Tool_Archivo_Nuevo_Usuario_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tool_Archivo_Nuevo_Usuario.Click
Dim Form_Nuevo_Usuario_V As New Form_Nuevo_Usuario() ' En el nombre, "V" simboliza "Variable"


Form_Nuevo_Usuario_V.MdiParent = Me ' Asigna a "Form_Nuevo_Usuario_V" su Padre (Me)
' O sea, "Form_Nuevo_Usuario_V" se comporta como Hija de "Me" o "Form_Index"
Form_Nuevo_Usuario_V.Show() ' Muestra "Form_Nuevo_Usuario_V"
Me.LayoutMdi(MdiLayout.TileHorizontal) ' Muestra los Formularios Hijos como TileHorizontal
End Sub
El método abre "Form_Nuevo_Usuario" tantas veces como yo haga click en "Tool_Archivo_Nuevo_Usuario", y sólo deseo que se habra una vez, que detecte que ya está mostrándose. ¿Cómo lo hago?

Muchas gracias por la ayuda! Un saludo!
  #2 (permalink)  
Antiguo 23/10/2008, 12:33
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: VB .NET - Formularios de Interfaz Múltiple (MDI)

pues revisa en el padre los childs que tenga y revisa su tipo si haces un ciclo sobre ello algo como

foreach fomulariohijo in FormularioPadre.MdiChildren

si existe alguna con el nombre o con el mismo tipo no la creas

http://msdn.microsoft.com/en-us/libr...ichildren.aspx
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 23/10/2008, 12:51
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: VB .NET - Formularios de Interfaz Múltiple (MDI)

Gracias Peterpay,

sin embargo he usado algo más fácil en cuestión a programación, o así me lo parece a mi. Lo explico:

En "Form_Index.Tool_Archivo_Nuevo_Usuario_Click" añado la línea
Cita:
Me.Tool_Archivo_Nuevo_Usuario.Enabled = False
que se encarga de bloquear "Tool_Archivo_Nuevo_Usuario".

Y para desbloquearlo, escribo en "Form_Nuevo_Usuario.Form_Nuevo_Usuario_Closed"
Cita:
Form_Index.Tool_Archivo_Nuevo_Usuario.Enabled = True
que vuelve a activar "Tool_Archivo_Nuevo_Usuario" cuando "Form_Nuevo_Usuario" se ha cerrado.

Muchas gracias nuevamente Peterpay. Un saludo!
  #4 (permalink)  
Antiguo 23/10/2008, 14:40
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: VB .NET - Formularios de Interfaz Múltiple (MDI)

Me vuelve a surgir un problema, y es que cuando Abro un Formulario y lo cierro, ya no lo puedo volver a abir, me da una excepción en la línea de "Form_Index" correspondiente al método "Tool_Archivo_Nuevo_Usuario_Click" que dice:
Cita:
Form_Nuevo_Usuario_V.Show()
La excepción dice:
Cita:
No se puede obtener acceso al objeto eliminado. Nombre del objeto: 'Form_Nuevo_Usuario'.
No se cómo solucionarlo, pues no se por qué da el error. Estoy leyendo un libro de VB .NET y dice que cierre los formularios y bloquee las opciones del Menú Archivo / Nuevo de la manera que tengo escrito, y resulta que da este error cuando Abro-Cierro y vuelvo a Abrir el Formulario.

Muchas gracias!!
  #5 (permalink)  
Antiguo 23/10/2008, 16:53
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: VB .NET - Formularios de Interfaz Múltiple (MDI)

Hola Isdiar

Te paso estes còdigo ojala que te sirva:

Aquí instancia el formulario hijo y ejecutamos la clase de abajo y si regresa “false” abrimos el formulario y si regresa “true” pues no.
Código:
Catalogos.frmProc _frmPro = new Catalogos.frmProc();
 if (ValidaFormularioAbierto(this, _frmPro.Name) == false)
  {
            _frmPro.MdiParent = this;
            _frmPro.WindowState = FormWindowState.Maximized;
            _frmPro.Location = new Point(0, 0);
            _frmPro.Show();
  }
Esta función recibe el MDI padre y el nombre del hijo que pretendes abrir y si esta abierto te regresa true.
Código:
        public bool ValidaFormularioAbierto(Form Padre, string NombreFormulario)
        {
            bool eValida = false;
            foreach (Form childForm in Padre.MdiChildren)
            {
                if (childForm.Name == NombreFormulario)
                {
                    eValida = true;
                    break;
                }
            }
            return eValida;
        }
Saludos.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #6 (permalink)  
Antiguo 26/10/2008, 09:52
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: VB .NET - Formularios de Interfaz Múltiple (MDI)

Muchas gracias mvazquez, ya está solucionado. El error resultó ser que la declaración de
Cita:
Dim Form_Nuevo_Usuario_V As New Form_Nuevo_Usuario() ' En el nombre, "V" simboliza "Variable"
la había sacado fuera de la función, la había puesto en el inicio del programa, y al cerrar el Form1, pues no volvía a declarar el formulario.

Un saludo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:07.