Yo sigo con arrays...

18/06/2005 - 03:23 por Ch0rY | Informe spam
Ahora se me ha ocurrido hacer una chorradilla (una mas :D).
He decidido hacer un formulario Principal y dividirlo en distintos
paneles (Titulo, Cabecera, Contenido y Botones)

! Titulo !
!-!
! !
! Cabecera !
!-!
! !
! !
! Contenido !
! !
! !
! !
! !
!-!
! botones !
!-!

y lo que quiero es mostar todos los formularios de los que depende la
"aplicacion" en el panel contenido, de tal forma que la navegacion entre
ellos sea atraves de los botones << y >> que se encuentran en el panel
botones.

Seria posible hacer esto?

En un modulo

Public FormularioActivo As Form
Public MuestraFormulario As Byte = 0
Public Formularios() As Form

Sub Main()
Formularios(0) = New Form_1()
Formularios(1) = New Form_2()
.
.
.
Formularios(n) = New Form_n()

applicarion.run(new frm_Principal)
End Sub

y en frm_Principal

Public frm As Form
.
.
.

Sub btn_Sigiente_Click(.)
If Not IsNothing(frm) Then frm.Dispose()
FormularioActivo +=1
frm =Formulario(FormularioActivo)
frm.TopLevel = False
frm.Show()
pnl_Contenido.Controls.Add(frm)
End Sub

Sub btn_Anterior_Click(.)
If Not IsNothing(frm) Then frm.Dispose()
FormularioActivo -=1
frm =Formulario(FormularioActivo)
frm.TopLevel = False
frm.Show()
pnl_Contenido.Controls.Add(frm)
End Sub

Ahora lo tengo asi

Private Sub btn_Anterior_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_Anterior.Click
MuestraFormulario -= 1

If Not IsNothing(frm) Then frm.Dispose()
Select Case MuestraFormulario
Case 1
frm = New Form1()
Case 2
frm = New Form2()
Case Else
MuestraFormulario += 1
Exit Sub
End Select
frm.TopLevel = False
frm.Show()
pnl_Contenido.Controls.Add(frm)

End Sub
Private Sub btn_Siguiente_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_Siguiente.Click
MuestraFormulario += 1
If Not IsNothing(frm) Then frm.Dispose()
Select Case MuestraFormulario
Case 1
frm = New Form1()
Case 2
frm = New Form2()
Case Else
MuestraFormulario -= 1
Exit Sub
End Select
frm.TopLevel = False
frm.Show()
pnl_Contenido.Controls.Add(frm)
End Sub

y hace lo que quiero, pero son dos formularios, si fuesen mas pues...


Se puede, Se puede, Se puede?

gracias
 

Leer las respuestas

#1 Juan Pedro Gonzalez
19/06/2005 - 22:01 | Informe spam
Si se puede hacer, de hecho yo lo he utilizado varias veces. Personalmente
suelo generar una clase que se encargue de "descargar" el formulario que ha
quedado obsoleto y cargar el nuevo formulario.

En los formularios que voy a cargar en el panel altero el constructor:

'Agregar cualquier inicialización después de la llamada a
InitializeComponent()
Me.FormBorderStyle = FormBorderStyle.None
Me.TopLevel = False
Me.Dock = DockStyle.Fill

...y luego creo la funcion para la gestion de las ventanas en el formulario
principal:

Friend Sub AbrirVentanaIncrustada(ByVal Formulario As
System.Windows.Forms.Form)
If Me.PanelContenido.Controls.Count = 1 Then
Dim oFormObsoleto As System.Windows.Forms.Form DirectCast(Me.PanelContenido.Controls.Item(0), System.Windows.Forms.Form)
oFormObsoleto.Close()
oFormObsoleto.Dispose()
End If

Me.PanelContenido.Controls.Add(Formulario)
Formulario.Show()
End Sub

Espero que te sirva

Saludos,

Juan Pedro González Gutiérrez

Preguntas similares