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

mdi en visual.net

Estas en el tema de mdi en visual.net en el foro de .NET en Foros del Web. Buenas a todos, soy nuevo en esto del visual.net y estoy haciendo un programa con un formulario padre. Los formularios hijos solo quiero que se ...
  #1 (permalink)  
Antiguo 04/01/2012, 17:44
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años, 3 meses
Puntos: 0
mdi en visual.net

Buenas a todos, soy nuevo en esto del visual.net y estoy haciendo un programa con un formulario padre. Los formularios hijos solo quiero que se abran de uno en uno y se cierre el que tenia abierto cada vez que pulse uno de los botones que se encuentran en la barra toolstrip. Es decir algo parecido a un word2007 ¿Como es la mejor manera de hacerlo? No se si es utilizando esa barra toolstrip y formularios padres e hijos.

Otra de la pregunta es, cada vez que abro un formulario hijo maximizado, aunque haya puesto ControlBox=false y el FormBorderStyle=none, encima del toolstrip me sale una barra con los controles de maximizar, minimizar y cerrar, ¿como puedo evitar que eso salga?

Os copio un poco del codigo del formulario padre por si no entendeis lo que quiero hacer:


Private Sub ToolSBtnPeliculas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolSBtnPeliculas.Click

For Each compruebafrmhijo As FrmPeliculas In Me.MdiChildren
If compruebafrmhijo.Name = "FrmPeliculas" Then
compruebafrmhijo.Activate()
Exit Sub
End If
Next
Dim myfrmPeliculas As New FrmPeliculas
myfrmPeliculas.MdiParent = Me
myfrmPeliculas.Show()

End Sub

Private Sub ToolSBtnVideojuegos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolSBtnVideojuegos.Click

For Each compruebafrmhijo As FrmVideojuegos In Me.MdiChildren
If compruebafrmhijo.Name = "FrmVideojuegos" Then
compruebafrmhijo.Activate()
Exit Sub
End If
Next
Dim myfrmVideojuegos As New FrmVideojuegos
myfrmVideojuegos.MdiParent = Me
myfrmVideojuegos.Show()

For Each ChildForm As FrmPeliculas In Me.MdiChildren
ChildForm.Close()
Next

End Sub

A ver si me podeis echar una mano ya que estoy un poco perdido.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 05/01/2012, 22:20
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años
Puntos: 7
Respuesta: mdi en visual.net

Lo mejor para eso es crear un control panel en el formulario padre, y agregar ahí el formulario hijo. Así no te saldrán los botones esos que dices.
__________________
Charlie.
  #3 (permalink)  
Antiguo 10/01/2012, 09:46
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: mdi en visual.net

Cita:
Iniciado por chcma Ver Mensaje
Lo mejor para eso es crear un control panel en el formulario padre, y agregar ahí el formulario hijo. Así no te saldrán los botones esos que dices.
Hola que tal? gracias por contestar.

Tengo que agregar el control panel y dentro de ese control agregar un formulario hijo?.
¿Como hago eso?

Decirte que tengo un menu toolstrip y lo que quiero es que cada boton de ese menu me abra un formulario hijo con sus correspondientes campos, que solo se pueda abrir un formulario hijo y ocupe todo el contenedor del formulario padre sin que este muestre la barra con las opciones de maximizar minimizar y cerrar del formulario hijo.

No se si me he explicado bien.

Un saludo y gracias.
  #4 (permalink)  
Antiguo 10/01/2012, 10:09
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años
Puntos: 7
Respuesta: mdi en visual.net

FormChild objHijo = new FormChild();
objHijo.MdiParent = this;
objHijo.Dock = DockStyle.Fill;

panel1.Controls.Add(objHijo);
objHijo.Show();
__________________
Charlie.
  #5 (permalink)  
Antiguo 18/01/2012, 09:27
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: mdi en visual.net

Cita:
Iniciado por chcma Ver Mensaje
FormChild objHijo = new FormChild();
objHijo.MdiParent = this;
objHijo.Dock = DockStyle.Fill;

panel1.Controls.Add(objHijo);
objHijo.Show();
Hola gracias por contestar, tenia algo parecido hecho pero me gusto mas tu forma. Ahora tengo una duda y es como hago parar cerrar un formulario hijo ya abierto cuando pinche en otro boton del menu toolstrip. Te adjunto parte del codigo para que veas mas o menos como lo tengo:

Private Sub ToolSBtnPrecision_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolSBtnPrecision.Click

'cerrar formulario hijo
For Each ChildForm As Form In Me.MdiChildren
ChildForm.Close()
Next

Dim myFrmprecision As New FrmPrecision
myFrmprecision = New FrmPrecision
myFrmprecision.MdiParent = Me
myFrmEmails.Dock = DockStyle.Fill
Me.Panel1.Controls.Add(myFrmprecision)
myFrmprecision.Show()
ToolSBtnEQCvn.Checked = False
ToolSBtnSemails.Checked = False

End Sub

Private Sub ToolSBtnSemails_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolSBtnSemails.Click

Dim myFrmEmails As FrmEmails
myFrmEmails = New FrmEmails
myFrmEmails.MdiParent = Me
myFrmEmails.Dock = DockStyle.Fill
Panel1.Controls.Add(myFrmEmails)
myFrmEmails.Show()
ToolSBtnEQCvn.Checked = False
ToolSBtnPrecision.Checked = False

End Sub


Un saludo y si puedes ayudarme muchas gracias.
  #6 (permalink)  
Antiguo 18/01/2012, 09:41
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años
Puntos: 7
Respuesta: mdi en visual.net

Pues como lo tienes tu, pero en una funcion, y llamas a esa función desde cada boton, o en el
evento Click del ToolStrip.

Código:
private sub CloseAllForms()

          For Each ChildForm As Form In Me.MdiChildren
                    ChildForm.Close()
          Next
end sub
__________________
Charlie.
  #7 (permalink)  
Antiguo 18/01/2012, 10:30
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: mdi en visual.net

Cita:
Iniciado por chcma Ver Mensaje
Pues como lo tienes tu, pero en una funcion, y llamas a esa función desde cada boton, o en el
evento Click del ToolStrip.

Código:
private sub CloseAllForms()

          For Each ChildForm As Form In Me.MdiChildren
                    ChildForm.Close()
          Next
end sub
Gracias de nuevo, el problema es que no me entra en el For y por lo tanto no lo cierra.

alguna idea?

Un saludo.
  #8 (permalink)  
Antiguo 18/01/2012, 11:18
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años
Puntos: 7
Respuesta: mdi en visual.net

Buenos así de pronto, no se me ocurre otra cosa que, como lo tienes cargado en un panel, recuperar el form que este en el panel, y cerrarlo.

Prueba con eso, y nos cuentas:
Te paso el ejemplo en C#:

((Form)miControlPanel.Controls[0]).Close();

En VB, creo que sería algo como:

DirectCast(miControlPanel.Controls(0), Form).Close()
__________________
Charlie.
  #9 (permalink)  
Antiguo 18/01/2012, 11:45
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: mdi en visual.net

Cita:
Iniciado por chcma Ver Mensaje
Buenos así de pronto, no se me ocurre otra cosa que, como lo tienes cargado en un panel, recuperar el form que este en el panel, y cerrarlo.

Prueba con eso, y nos cuentas:
Te paso el ejemplo en C#:

((Form)miControlPanel.Controls[0]).Close();

En VB, creo que sería algo como:

DirectCast(miControlPanel.Controls(0), Form).Close()
buenas si que me ha servido, pero la instruccion sola me daba error si no habia ningun formulario abierto, lo he solucionado de la siguiente manera:

cree un contador y en cada evento click del boton lo puse asi contadorformulario=1 y la funcion la cree de la siguiente manera:

Private Sub CloseAllFomr()

If contaformulario >= 1 Then

DirectCast(Panel1.Controls(0), Form).Close()
contaformulario = 0

End If

End Sub

que os parece ¿estaria correcto de esta forma o hay alguna otra que sea mas correcto?
Funciona perfectamente, pero claro no es muy sofisticada la funcion.
Un saludo.

Etiquetas: mdi, net, visual
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 21:19.