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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Ch0rY
20/06/2005 - 18:53 | Informe spam
Gracias por el codigo, es bastante interesante, pero no me funciona, creo q
el fallo esta aqui

Public Formularios() As Windows.Forms.Form

-> Formularios(0) = New Form_1() <-
Formularios(1) = New Form_2()
.
.
.
Formularios(n) = New Form_n()

Me pone:
***************************************************************************

Excepcion no controlada del tipo system.nullreferenceexception en ins.exe
Informacion adicional: Referencia a un objeto no establecida como instancia
de un objeto.

***************************************************************************
Respuesta Responder a este mensaje
#3 Ch0rY
21/06/2005 - 18:13 | Informe spam
'************************************************************************
' En el Modulo Principal
Public MuestraFormulario As Byte = 0
Public Formularios(1) As String


Sub Main()
Formularios(0) = "Form1"
Formularios(1) = "Form2"
Application.Run(New frm_Principal())
End Sub
'************************************************************************


' En el formulario frm_Principal
'************************************************************************
Imports ass = System.Reflection.Assembly

'En la Clase
'************************************************************************
Public frm As Form

Private Sub btn_Anterior_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_Anterior.Click
If MuestraFormulario = 0 Then Exit Sub
MuestraFormulario -= 1
AbrirVentanaIncrustada(Formularios(MuestraFormulario))
End Sub
Private Sub btn_Siguiente_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_Siguiente.Click
If MuestraFormulario = Formularios.Length - 1 Then Exit Sub
MuestraFormulario += 1
AbrirVentanaIncrustada(Formularios(MuestraFormulario))
End Sub

Friend Sub AbrirVentanaIncrustada(ByVal Formulario As String)

If Me.pnl_Contenido.Controls.Count = 1 Then
Dim oFormObsoleto As System.Windows.Forms.Form = DirectCast
(Me.pnl_Contenido.Controls.Item(0), System.Windows.Forms.Form)
oFormObsoleto.Close()
oFormObsoleto.Dispose()
End If

Dim oForm2 As Object = Activator.CreateInstance(Type.GetType
("ins." & Formulario))

frm = DirectCast(oForm2, Form)
frm.TopLevel = False
frm.Dock() = DockStyle.Fill
Me.pnl_Contenido.Controls.Add(frm)
frm.Show()
End Sub
'************************************************************************
'************************************************************************
Respuesta Responder a este mensaje
#4 Ch0rY
21/06/2005 - 18:24 | Informe spam
'************* Formulario frm_Principal *******************
Imports System.Drawing
Imports ass = System.Reflection.Assembly
Public Class frm_Principal
Inherits System.Windows.Forms.Form

Public frm As Form

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

Public Sub New()
MyBase.New()

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

'Agregar cualquier inicialización después de la llamada a
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

'NOTA: el Diseñador de Windows Forms requiere el siguiente
procedimiento
'Puede modificarse utilizando el Diseñador de Windows Forms.
'No lo modifique con el editor de código.
Friend WithEvents pnl_Botones As System.Windows.Forms.Panel
Friend WithEvents btn_Acerca As System.Windows.Forms.Button
Friend WithEvents pnl_Barra_Titulo As System.Windows.Forms.Panel
Friend WithEvents btn_Siguiente As System.Windows.Forms.Button
Friend WithEvents btn_Anterior As System.Windows.Forms.Button
Friend WithEvents pnl_Titulos As System.Windows.Forms.Panel
Friend WithEvents pnl_Contenido As System.Windows.Forms.Panel
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents pic_Imagen As System.Windows.Forms.PictureBox
Friend WithEvents btn_Cancelar As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.pnl_Botones = New System.Windows.Forms.Panel
Me.btn_Anterior = New System.Windows.Forms.Button
Me.btn_Siguiente = New System.Windows.Forms.Button
Me.btn_Cancelar = New System.Windows.Forms.Button
Me.btn_Acerca = New System.Windows.Forms.Button
Me.pnl_Barra_Titulo = New System.Windows.Forms.Panel
Me.Button1 = New System.Windows.Forms.Button
Me.pnl_Titulos = New System.Windows.Forms.Panel
Me.pnl_Contenido = New System.Windows.Forms.Panel
Me.pic_Imagen = New System.Windows.Forms.PictureBox
Me.pnl_Botones.SuspendLayout()
Me.pnl_Barra_Titulo.SuspendLayout()
Me.SuspendLayout()
'
'pnl_Botones
'
Me.pnl_Botones.Controls.Add(Me.btn_Anterior)
Me.pnl_Botones.Controls.Add(Me.btn_Siguiente)
Me.pnl_Botones.Controls.Add(Me.btn_Cancelar)
Me.pnl_Botones.Controls.Add(Me.btn_Acerca)
Me.pnl_Botones.Dock = System.Windows.Forms.DockStyle.Bottom
Me.pnl_Botones.Location = New System.Drawing.Point(0, 468)
Me.pnl_Botones.Name = "pnl_Botones"
Me.pnl_Botones.Size = New System.Drawing.Size(760, 32)
Me.pnl_Botones.TabIndex = 1
'
'btn_Anterior
'
Me.btn_Anterior.Location = New System.Drawing.Point(468, 4)
Me.btn_Anterior.Name = "btn_Anterior"
Me.btn_Anterior.Size = New System.Drawing.Size(90, 25)
Me.btn_Anterior.TabIndex = 1
Me.btn_Anterior.TabStop = False
Me.btn_Anterior.Text = "<< Anterior"
'
'btn_Siguiente
'
Me.btn_Siguiente.Location = New System.Drawing.Point(564, 4)
Me.btn_Siguiente.Name = "btn_Siguiente"
Me.btn_Siguiente.Size = New System.Drawing.Size(90, 25)
Me.btn_Siguiente.TabIndex = 2
Me.btn_Siguiente.TabStop = False
Me.btn_Siguiente.Text = "Siguiente >>"
'
'btn_Cancelar
'
Me.btn_Cancelar.Location = New System.Drawing.Point(664, 4)
Me.btn_Cancelar.Name = "btn_Cancelar"
Me.btn_Cancelar.Size = New System.Drawing.Size(90, 25)
Me.btn_Cancelar.TabIndex = 3
Me.btn_Cancelar.TabStop = False
Me.btn_Cancelar.Text = "Cancelar"
'
'btn_Acerca
'
Me.btn_Acerca.Location = New System.Drawing.Point(60, 4)
Me.btn_Acerca.Name = "btn_Acerca"
Me.btn_Acerca.Size = New System.Drawing.Size(90, 25)
Me.btn_Acerca.TabIndex = 0
Me.btn_Acerca.TabStop = False
Me.btn_Acerca.Text = "Acerca de ..."
'
'pnl_Barra_Titulo
'
Me.pnl_Barra_Titulo.Controls.Add(Me.Button1)
Me.pnl_Barra_Titulo.Dock = System.Windows.Forms.DockStyle.Top
Me.pnl_Barra_Titulo.Location = New System.Drawing.Point(0, 0)
Me.pnl_Barra_Titulo.Name = "pnl_Barra_Titulo"
Me.pnl_Barra_Titulo.Size = New System.Drawing.Size(760, 24)
Me.pnl_Barra_Titulo.TabIndex = 2
'
'Button1
'
Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.Button1.Font = New System.Drawing.Font("Microsoft Sans Serif",
8.25!, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Button1.Location = New System.Drawing.Point(740, 4)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(15, 15)
Me.Button1.TabIndex = 0
Me.Button1.TabStop = False
Me.Button1.Text = "X"
'
'pnl_Titulos
'
Me.pnl_Titulos.Dock = System.Windows.Forms.DockStyle.Top
Me.pnl_Titulos.Location = New System.Drawing.Point(0, 24)
Me.pnl_Titulos.Name = "pnl_Titulos"
Me.pnl_Titulos.Size = New System.Drawing.Size(760, 50)
Me.pnl_Titulos.TabIndex = 6
'
'pnl_Contenido
'
Me.pnl_Contenido.Dock = System.Windows.Forms.DockStyle.Fill
Me.pnl_Contenido.Location = New System.Drawing.Point(212, 74)
Me.pnl_Contenido.Name = "pnl_Contenido"
Me.pnl_Contenido.Size = New System.Drawing.Size(548, 394)
Me.pnl_Contenido.TabIndex = 8
'
'pic_Imagen
'
Me.pic_Imagen.Dock = System.Windows.Forms.DockStyle.Left
Me.pic_Imagen.Location = New System.Drawing.Point(0, 74)
Me.pic_Imagen.Name = "pic_Imagen"
Me.pic_Imagen.Size = New System.Drawing.Size(212, 394)
Me.pic_Imagen.TabIndex = 7
Me.pic_Imagen.TabStop = False
'
'frm_Principal
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(760, 500)
Me.Controls.Add(Me.pnl_Contenido)
Me.Controls.Add(Me.pic_Imagen)
Me.Controls.Add(Me.pnl_Titulos)
Me.Controls.Add(Me.pnl_Barra_Titulo)
Me.Controls.Add(Me.pnl_Botones)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
Me.Name = "frm_Principal"
Me.StartPosition =
System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Instalador"
Me.pnl_Botones.ResumeLayout(False)
Me.pnl_Barra_Titulo.ResumeLayout(False)
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub btn_Salir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_Cancelar.Click
End
End Sub

Private Sub pnl_Botones_Paint(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.PaintEventArgs) Handles pnl_Botones.Paint
Dim graf As Graphics
graf = e.Graphics
graf.DrawLine(New Pen(Brushes.Black), 0, 0, pnl_Botones.Width, 0)
End Sub
Private Sub pnl_Titulos_Paint(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.PaintEventArgs) Handles pnl_Titulos.Paint
Dim graf As Graphics
graf = e.Graphics
graf.DrawLine(New Pen(Brushes.Black), 0, pnl_Titulos.Height - 1,
pnl_Titulos.Width, pnl_Titulos.Height - 1)
End Sub
Private Sub pnl_Barra_Titulo_Paint(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.PaintEventArgs) Handles
pnl_Barra_Titulo.Paint
Dim a As New System.Drawing.Drawing2D.LinearGradientBrush(New
RectangleF(0, 0, Me.Width, Me.Height), Color.Black, Color.White,
Drawing.Drawing2D.LinearGradientMode.Horizontal)
Dim g As Graphics = e.Graphics
g.FillRectangle(a, New RectangleF(0, 0, Me.Width, Me.Height))
Dim x, y As Single
Dim Texto As String = ".: " & Me.Text & " :."
x = 5 : y = 5
g.DrawString(Texto, New Font("Verdana", 8, FontStyle.Bold),
Brushes.DarkGray, x + 1, y + 1)
g.DrawString(Texto, New Font("Verdana", 8, FontStyle.Bold),
Brushes.White, x, y)

End Sub

Private Sub btn_Acerca_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_Acerca.Click

End Sub
Private Sub btn_Anterior_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_Anterior.Click
If MuestraFormulario = 0 Then Exit Sub
MuestraFormulario -= 1
AbrirVentanaIncrustada(Formularios(MuestraFormulario))
End Sub
Private Sub btn_Siguiente_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_Siguiente.Click
If MuestraFormulario = Formularios.Length - 1 Then Exit Sub
MuestraFormulario += 1
AbrirVentanaIncrustada(Formularios(MuestraFormulario))
End Sub

Friend Sub AbrirVentanaIncrustada(ByVal Formulario As String)

If Me.pnl_Contenido.Controls.Count = 1 Then
Dim oFormObsoleto As System.Windows.Forms.Form = DirectCast
(Me.pnl_Contenido.Controls.Item(0), System.Windows.Forms.Form)
oFormObsoleto.Close()
oFormObsoleto.Dispose()
End If

Dim OtroForm As Object = Activator.CreateInstance(Type.GetType
("ins." & Formulario))

frm = DirectCast(OtroForm, Form)
With frm
.FormBorderStyle = FormBorderStyle.None
.TopLevel = False
.WindowState = FormWindowState.Maximized
.StartPosition = FormStartPosition.CenterParent
.Dock() = DockStyle.Fill
.ControlBox = False
.Show()
End With
Me.pnl_Contenido.Controls.Add(frm)
End Sub

Private Sub frm_Principal_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
AbrirVentanaIncrustada(Formularios(MuestraFormulario))
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
End Class



'************* Modulo Principal *******************
Module Principal


Public MuestraFormulario As Byte = 0
Public Formularios() As String = {"Form1", "Form2"}
Public Boton_Anterior As Byte = 1
Public Boton_Siguiente As Byte = 2
Public Boton_Cancelar As Byte = 3


Sub Main()
Application.Run(New frm_Principal)
End Sub


End Module
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida