Descargar/Ocultar Formulario Hijo

15/07/2004 - 09:32 por Oriol | Informe spam
Hola grupo,

Tengo un pequeño problema, y ademas creo que debe ser una tonteria pero no
logro dar con la solucion.

Tengo un proyecto en WinForms y C#. En el formulario principal tengo un
Panel que se llama "panelGran" donde quiero que se cargue una serie de
informacion en formularios distintos. Tengo creados loa formularios sin
borde para que queden bien integrados en el form main. A estos formularios
los llamo asi:

frmSubClienteDetalle frmSubC = new frmSubClienteDetalle(Idcliente);

frmSubC.TopLevel = false;

frmSubC.Parent = this.panelGran;

frmSubC.Show();

frmSubC.Activate();

Asi, me quedan dentro del panelGran y se mueven y responden igual que el
resto del formulario.

Mi problema viene cuando intento cargar otro formulario. Primero tengo que
desactivar o ocultar el que ya esta cargado, pero no se porque, en el mismo
form main no me permite acceder a frmSubC para poder ocultarlo o quitarlo.

Alguna sugerencia... estoy un poco agobiado con eso... y si se puede cargar
los forms de otra forma, siempre que queden embedidos dentro de panelGran,
todas las opciones seran bien recibidas!

Gracias de antemano!
Oriol.

Preguntas similare

Leer las respuestas

#1 Alejandro Perez
15/07/2004 - 16:04 | Informe spam
Hola de nuevo Oriol! Como estas?.

A ver.. si te entendi bien lo que quieres hacer es,
mostrar dentro de un Panel, que esta en
un "frmPrincipal", otros
formularios... "frmSubA", "frmSubB", etc.

Y quieres que solo se muestre un frmSub a la vez? Es
decir, que si vas a mostrar SubB en el panel, se oculte
el que estaba abierto?

Si no es asi, explicanos de nuevo para intentar ayudarte.
Si la cosa es asi, no deberias tener ningun problema
entonces... Simplemente harias algo como que:

if(frmSubA==null)
{
frmSubA = new frmSubClienteDetalle();
frmSubA.TopLevel = false;
frmSubA.Parent = this.panelGran;
}
if(frmSubB!=null)
frmSubB.Hide();

frmSubA.Show();
frmSubA.Activate();

Y asi con todos los formularios.

Avisanos que paso por alla.

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




Hola grupo,

Tengo un pequeño problema, y ademas creo que debe ser


una tonteria pero no
logro dar con la solucion.

Tengo un proyecto en WinForms y C#. En el formulario


principal tengo un
Panel que se llama "panelGran" donde quiero que se


cargue una serie de
informacion en formularios distintos. Tengo creados loa


formularios sin
borde para que queden bien integrados en el form main. A


estos formularios
los llamo asi:

frmSubClienteDetalle frmSubC = new frmSubClienteDetalle


(Idcliente);

frmSubC.TopLevel = false;

frmSubC.Parent = this.panelGran;

frmSubC.Show();

frmSubC.Activate();

Asi, me quedan dentro del panelGran y se mueven y


responden igual que el
resto del formulario.

Mi problema viene cuando intento cargar otro formulario.


Primero tengo que
desactivar o ocultar el que ya esta cargado, pero no se


porque, en el mismo
form main no me permite acceder a frmSubC para poder


ocultarlo o quitarlo.

Alguna sugerencia... estoy un poco agobiado con eso... y


si se puede cargar
los forms de otra forma, siempre que queden embedidos


dentro de panelGran,
todas las opciones seran bien recibidas!

Gracias de antemano!
Oriol.




.

Respuesta Responder a este mensaje
#2 Oriol
16/07/2004 - 13:09 | Informe spam
Hola Alejandro,

Los formularios de llaman desde un TreeView y se les pasa un IdCliente. Es
decir, el mismo form puede ser llamado desde diferentes nodos con parametros
diferentes, con lo cual, creo que no puedo simplemente ocultar y mostrar el
formulario, sino que cada vez deberia cargarlo y descargarlo.
Por ejemplo tengo un arbol asi:
Cliente 1
|-- Informacion (ID00001) Aqui llamo a frmSubA(ID00001)
|-- Facturacion (ID00001) Aqui llamo a frmSubB
Cliente 2
|-- Informacion (ID00002) Aqui llamo a frmSubA(ID00002)
|-- Facturacion (ID00002) Aqui llamo a frmSubB(ID00002)
etc...

Los forms son hijos del Panel "panelGran" del frmMain, y el TreeView tambien
esta en el frmMain. Los eventos para pasar el ID del arbol hacia los
formularios, ya los tengo, tambien los se cargar dentro del panelGran como
comenté antes, pero lo que no se, es como descargar los forms.

Espero que haya quedado mas claro, aun asi, si algo no se entiende, te lo
puedo explicar mejor.

Gracias de antemano.
Saludos,
Oriol.

"Alejandro Perez" escribió en el mensaje
news:2e0f001c46a74$9de2bed0$
Hola de nuevo Oriol! Como estas?.

A ver.. si te entendi bien lo que quieres hacer es,
mostrar dentro de un Panel, que esta en
un "frmPrincipal", otros
formularios... "frmSubA", "frmSubB", etc.

Y quieres que solo se muestre un frmSub a la vez? Es
decir, que si vas a mostrar SubB en el panel, se oculte
el que estaba abierto?

Si no es asi, explicanos de nuevo para intentar ayudarte.
Si la cosa es asi, no deberias tener ningun problema
entonces... Simplemente harias algo como que:

if(frmSubA==null)
{
frmSubA = new frmSubClienteDetalle();
frmSubA.TopLevel = false;
frmSubA.Parent = this.panelGran;
}
if(frmSubB!=null)
frmSubB.Hide();

frmSubA.Show();
frmSubA.Activate();

Y asi con todos los formularios.

Avisanos que paso por alla.

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




Hola grupo,

Tengo un pequeño problema, y ademas creo que debe ser


una tonteria pero no
logro dar con la solucion.

Tengo un proyecto en WinForms y C#. En el formulario


principal tengo un
Panel que se llama "panelGran" donde quiero que se


cargue una serie de
informacion en formularios distintos. Tengo creados loa


formularios sin
borde para que queden bien integrados en el form main. A


estos formularios
los llamo asi:

frmSubClienteDetalle frmSubC = new frmSubClienteDetalle


(Idcliente);

frmSubC.TopLevel = false;

frmSubC.Parent = this.panelGran;

frmSubC.Show();

frmSubC.Activate();

Asi, me quedan dentro del panelGran y se mueven y


responden igual que el
resto del formulario.

Mi problema viene cuando intento cargar otro formulario.


Primero tengo que
desactivar o ocultar el que ya esta cargado, pero no se


porque, en el mismo
form main no me permite acceder a frmSubC para poder


ocultarlo o quitarlo.

Alguna sugerencia... estoy un poco agobiado con eso... y


si se puede cargar
los forms de otra forma, siempre que queden embedidos


dentro de panelGran,
todas las opciones seran bien recibidas!

Gracias de antemano!
Oriol.




.

Respuesta Responder a este mensaje
#3 Alejandro Perez
16/07/2004 - 16:54 | Informe spam
Hola Oriol. Lo que no entiendo todavia es porque dices
que no puedes simplemente ocultarlo. Me parece
innecesario estar creando instancias para cada nodo del
treeview. Porque en vez de pasar entonces ese IdCliente
al constructor, no lo pasas a un metodo?.

Yo te dejo aqui el ejemplo de como lo veo, y cuentame en
que es diferente al caso que se te esta presentando:

Bye!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace FormPanel
{
public class frmPrincipal :
System.Windows.Forms.Form
{
private System.Windows.Forms.Panel
panelGran;
frmSubA objfrmSubA;
frmSubB objfrmSubB;
private System.Windows.Forms.TreeView tv;
string IdCliente;

private System.ComponentModel.Container
components = null;

public frmPrincipal()
{
InitializeComponent();
}

protected override void Dispose( bool
disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Código generado por el Diseñador
de Windows Forms
/// <summary>
/// Método necesario para admitir el
Diseñador. No se puede modificar
/// el contenido del método con el editor
de código.
/// </summary>
private void InitializeComponent()
{
this.panelGran = new
System.Windows.Forms.Panel();
this.tv = new
System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// panelGran
//
this.panelGran.BorderStyle =
System.Windows.Forms.BorderStyle.FixedSingle;
this.panelGran.Location = new
System.Drawing.Point(160, 40);
this.panelGran.Name = "panelGran";
this.panelGran.Size = new
System.Drawing.Size(456, 288);
this.panelGran.TabIndex = 0;
//
// tv
//
this.tv.ImageIndex = -1;
this.tv.Location = new
System.Drawing.Point(16, 48);
this.tv.Name = "tv";
this.tv.SelectedImageIndex = -1;
this.tv.Size = new
System.Drawing.Size(121, 272);
this.tv.TabIndex = 3;
this.tv.AfterSelect += new
System.Windows.Forms.TreeViewEventHandler
(this.tv_AfterSelect);
//
// frmPrincipal
//
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.ClientSize = new
System.Drawing.Size(632, 342);
this.Controls.Add(this.tv);
this.Controls.Add(this.panelGran);
this.Name = "frmPrincipal";
this.Text = "Form1";
this.Load += new
System.EventHandler(this.frmPrincipal_Load);
this.ResumeLayout(false);

}
#endregion

[STAThread]
static void Main()
{
Application.Run(new frmPrincipal
());
}

private void tv_AfterSelect(object
sender, System.Windows.Forms.TreeViewEventArgs e)
{
switch(e.Node.Tag.ToString())
{
case "INF":

IdCliente=e.Node.Parent.Tag.ToString();
if
(objfrmSubA==null)
{

objfrmSubA = new frmSubA();

objfrmSubA.TopLevel = false;

objfrmSubA.Parent = this.panelGran;
}
if(objfrmSubB!
=null)
{

objfrmSubB.Hide();
}

objfrmSubA.FillForm(IdCliente);
objfrmSubA.Show();

objfrmSubA.Activate();
break;
case "FAC":

IdCliente=e.Node.Parent.Tag.ToString();
if
(objfrmSubB==null)
{

objfrmSubB = new frmSubB();

objfrmSubB.TopLevel = false;

objfrmSubB.Parent = this.panelGran;
}
if(objfrmSubA!
=null)
{

objfrmSubA.Hide();
}

objfrmSubB.FillForm(IdCliente);
objfrmSubB.Show();

objfrmSubB.Activate();
break;
}
}

private void frmPrincipal_Load(object
sender, System.EventArgs e)
{
tv.Nodes.Add(new TreeNode
("Cliente 1"));
tv.Nodes[0].Tag="CLI01";
tv.Nodes[0].Nodes.Add(new TreeNode
("Informacion"));
tv.Nodes[0].Nodes[0].Tag="INF";
tv.Nodes[0].Nodes.Add(new TreeNode
("Facturacion"));
tv.Nodes[0].Nodes[1].Tag="FAC";

tv.Nodes.Add(new TreeNode
("Cliente 2"));
tv.Nodes[1].Tag="CLI02";
tv.Nodes[1].Nodes.Add(new TreeNode
("Informacion"));
tv.Nodes[1].Nodes[0].Tag="INF";
tv.Nodes[1].Nodes.Add(new TreeNode
("Facturacion"));
tv.Nodes[1].Nodes[1].Tag="FAC";
}
}
public class frmSubA : System.Windows.Forms.Form
{
private System.ComponentModel.Container
components = null;

public frmSubA()
{
InitializeComponent();
}
public void FillForm(string IdCliente)
{
//Se muestra toda la facturacion
del cliente
this.Text="Facturacion: " +
IdCliente;
}
protected override void Dispose( bool
disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Código generado por el Diseñador
de Windows Forms
private void InitializeComponent()
{
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.BackColor =
System.Drawing.Color.Green;
this.ClientSize = new
System.Drawing.Size(250, 102);
this.Name = "Form2";
this.Text = "Form2";

}
#endregion
}

public class frmSubB : System.Windows.Forms.Form
{
private System.ComponentModel.Container
components = null;

public frmSubB()
{
InitializeComponent();
}
public void FillForm(string IdCliente)
{
//Se muestra toda la info del
cliente
this.Text="Info: " + IdCliente;
}
protected override void Dispose( bool
disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

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

private void InitializeComponent()
{
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.BackColor =
System.Drawing.SystemColors.Highlight;
this.ClientSize = new
System.Drawing.Size(250, 94);
this.Name
= "frmSubClienteDetalle";
this.Text
= "frmSubClienteDetalle";

}
#endregion
}
}


Hola Alejandro,

Los formularios de llaman desde un TreeView y se les


pasa un IdCliente. Es
decir, el mismo form puede ser llamado desde diferentes


nodos con parametros
diferentes, con lo cual, creo que no puedo simplemente


ocultar y mostrar el
formulario, sino que cada vez deberia cargarlo y


descargarlo.
Por ejemplo tengo un arbol asi:
Cliente 1
|-- Informacion (ID00001) Aqui llamo a frmSubA(ID00001)
|-- Facturacion (ID00001) Aqui llamo a frmSubB
Cliente 2
|-- Informacion (ID00002) Aqui llamo a frmSubA(ID00002)
|-- Facturacion (ID00002) Aqui llamo a frmSubB(ID00002)
etc...

Los forms son hijos del Panel "panelGran" del frmMain, y


el TreeView tambien
esta en el frmMain. Los eventos para pasar el ID del


arbol hacia los
formularios, ya los tengo, tambien los se cargar dentro


del panelGran como
comenté antes, pero lo que no se, es como descargar los


forms.

Espero que haya quedado mas claro, aun asi, si algo no


se entiende, te lo
puedo explicar mejor.

Gracias de antemano.
Saludos,
Oriol.

"Alejandro Perez" escribió


en el mensaje
news:2e0f001c46a74$9de2bed0$
Hola de nuevo Oriol! Como estas?.

A ver.. si te entendi bien lo que quieres hacer es,
mostrar dentro de un Panel, que esta en
un "frmPrincipal", otros
formularios... "frmSubA", "frmSubB", etc.

Y quieres que solo se muestre un frmSub a la vez? Es
decir, que si vas a mostrar SubB en el panel, se oculte
el que estaba abierto?

Si no es asi, explicanos de nuevo para intentar ayudarte.
Si la cosa es asi, no deberias tener ningun problema
entonces... Simplemente harias algo como que:

if(frmSubA==null)
{
frmSubA = new frmSubClienteDetalle();
frmSubA.TopLevel = false;
frmSubA.Parent = this.panelGran;
}
if(frmSubB!=null)
frmSubB.Hide();

frmSubA.Show();
frmSubA.Activate();

Y asi con todos los formularios.

Avisanos que paso por alla.

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




Hola grupo,

Tengo un pequeño problema, y ademas creo que debe ser


una tonteria pero no
logro dar con la solucion.

Tengo un proyecto en WinForms y C#. En el formulario


principal tengo un
Panel que se llama "panelGran" donde quiero que se


cargue una serie de
informacion en formularios distintos. Tengo creados loa


formularios sin
borde para que queden bien integrados en el form main. A


estos formularios
los llamo asi:

frmSubClienteDetalle frmSubC = new frmSubClienteDetalle


(Idcliente);

frmSubC.TopLevel = false;

frmSubC.Parent = this.panelGran;

frmSubC.Show();

frmSubC.Activate();

Asi, me quedan dentro del panelGran y se mueven y


responden igual que el
resto del formulario.

Mi problema viene cuando intento cargar otro formulario.


Primero tengo que
desactivar o ocultar el que ya esta cargado, pero no se


porque, en el mismo
form main no me permite acceder a frmSubC para poder


ocultarlo o quitarlo.

Alguna sugerencia... estoy un poco agobiado con eso... y


si se puede cargar
los forms de otra forma, siempre que queden embedidos


dentro de panelGran,
todas las opciones seran bien recibidas!

Gracias de antemano!
Oriol.




.





.

Respuesta Responder a este mensaje
#4 Oriol
16/07/2004 - 18:07 | Informe spam
Hola Alejandro!

GRACIAS! Realmente estaba equivocado en querer crear el form cada vez. He
seguido tu ejemplo, y me funciona a las mil maravillas!!!!!!

Mil gracias!

Una ultima pregunta: como tengo 5 forms (frmSubX), hay alguna forma de no
tener que repetir 5 vezes el IF del Hide con algun for each o algo asi...
Sino, simplemente pongo 5 ifs y solucionado.

Un abrazo!
Oriol.


"Alejandro Perez" escribió en el mensaje
news:2d8b701c46b44$d2278510$
Hola Oriol. Lo que no entiendo todavia es porque dices
que no puedes simplemente ocultarlo. Me parece
innecesario estar creando instancias para cada nodo del
treeview. Porque en vez de pasar entonces ese IdCliente
al constructor, no lo pasas a un metodo?.

Yo te dejo aqui el ejemplo de como lo veo, y cuentame en
que es diferente al caso que se te esta presentando:

Bye!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace FormPanel
{
public class frmPrincipal :
System.Windows.Forms.Form
{
private System.Windows.Forms.Panel
panelGran;
frmSubA objfrmSubA;
frmSubB objfrmSubB;
private System.Windows.Forms.TreeView tv;
string IdCliente;

private System.ComponentModel.Container
components = null;

public frmPrincipal()
{
InitializeComponent();
}

protected override void Dispose( bool
disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Código generado por el Diseñador
de Windows Forms
/// <summary>
/// Método necesario para admitir el
Diseñador. No se puede modificar
/// el contenido del método con el editor
de código.
/// </summary>
private void InitializeComponent()
{
this.panelGran = new
System.Windows.Forms.Panel();
this.tv = new
System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// panelGran
//
this.panelGran.BorderStyle System.Windows.Forms.BorderStyle.FixedSingle;
this.panelGran.Location = new
System.Drawing.Point(160, 40);
this.panelGran.Name = "panelGran";
this.panelGran.Size = new
System.Drawing.Size(456, 288);
this.panelGran.TabIndex = 0;
//
// tv
//
this.tv.ImageIndex = -1;
this.tv.Location = new
System.Drawing.Point(16, 48);
this.tv.Name = "tv";
this.tv.SelectedImageIndex = -1;
this.tv.Size = new
System.Drawing.Size(121, 272);
this.tv.TabIndex = 3;
this.tv.AfterSelect += new
System.Windows.Forms.TreeViewEventHandler
(this.tv_AfterSelect);
//
// frmPrincipal
//
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.ClientSize = new
System.Drawing.Size(632, 342);
this.Controls.Add(this.tv);
this.Controls.Add(this.panelGran);
this.Name = "frmPrincipal";
this.Text = "Form1";
this.Load += new
System.EventHandler(this.frmPrincipal_Load);
this.ResumeLayout(false);

}
#endregion

[STAThread]
static void Main()
{
Application.Run(new frmPrincipal
());
}

private void tv_AfterSelect(object
sender, System.Windows.Forms.TreeViewEventArgs e)
{
switch(e.Node.Tag.ToString())
{
case "INF":

IdCliente=e.Node.Parent.Tag.ToString();
if
(objfrmSubA==null)
{

objfrmSubA = new frmSubA();

objfrmSubA.TopLevel = false;

objfrmSubA.Parent = this.panelGran;
}
if(objfrmSubB!
=null)
{

objfrmSubB.Hide();
}

objfrmSubA.FillForm(IdCliente);
objfrmSubA.Show();

objfrmSubA.Activate();
break;
case "FAC":

IdCliente=e.Node.Parent.Tag.ToString();
if
(objfrmSubB==null)
{

objfrmSubB = new frmSubB();

objfrmSubB.TopLevel = false;

objfrmSubB.Parent = this.panelGran;
}
if(objfrmSubA!
=null)
{

objfrmSubA.Hide();
}

objfrmSubB.FillForm(IdCliente);
objfrmSubB.Show();

objfrmSubB.Activate();
break;
}
}

private void frmPrincipal_Load(object
sender, System.EventArgs e)
{
tv.Nodes.Add(new TreeNode
("Cliente 1"));
tv.Nodes[0].Tag="CLI01";
tv.Nodes[0].Nodes.Add(new TreeNode
("Informacion"));
tv.Nodes[0].Nodes[0].Tag="INF";
tv.Nodes[0].Nodes.Add(new TreeNode
("Facturacion"));
tv.Nodes[0].Nodes[1].Tag="FAC";

tv.Nodes.Add(new TreeNode
("Cliente 2"));
tv.Nodes[1].Tag="CLI02";
tv.Nodes[1].Nodes.Add(new TreeNode
("Informacion"));
tv.Nodes[1].Nodes[0].Tag="INF";
tv.Nodes[1].Nodes.Add(new TreeNode
("Facturacion"));
tv.Nodes[1].Nodes[1].Tag="FAC";
}
}
public class frmSubA : System.Windows.Forms.Form
{
private System.ComponentModel.Container
components = null;

public frmSubA()
{
InitializeComponent();
}
public void FillForm(string IdCliente)
{
//Se muestra toda la facturacion
del cliente
this.Text="Facturacion: " +
IdCliente;
}
protected override void Dispose( bool
disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Código generado por el Diseñador
de Windows Forms
private void InitializeComponent()
{
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.BackColor System.Drawing.Color.Green;
this.ClientSize = new
System.Drawing.Size(250, 102);
this.Name = "Form2";
this.Text = "Form2";

}
#endregion
}

public class frmSubB : System.Windows.Forms.Form
{
private System.ComponentModel.Container
components = null;

public frmSubB()
{
InitializeComponent();
}
public void FillForm(string IdCliente)
{
//Se muestra toda la info del
cliente
this.Text="Info: " + IdCliente;
}
protected override void Dispose( bool
disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

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

private void InitializeComponent()
{
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.BackColor System.Drawing.SystemColors.Highlight;
this.ClientSize = new
System.Drawing.Size(250, 94);
this.Name
= "frmSubClienteDetalle";
this.Text
= "frmSubClienteDetalle";

}
#endregion
}
}


Hola Alejandro,

Los formularios de llaman desde un TreeView y se les


pasa un IdCliente. Es
decir, el mismo form puede ser llamado desde diferentes


nodos con parametros
diferentes, con lo cual, creo que no puedo simplemente


ocultar y mostrar el
formulario, sino que cada vez deberia cargarlo y


descargarlo.
Por ejemplo tengo un arbol asi:
Cliente 1
|-- Informacion (ID00001) Aqui llamo a frmSubA(ID00001)
|-- Facturacion (ID00001) Aqui llamo a frmSubB
Cliente 2
|-- Informacion (ID00002) Aqui llamo a frmSubA(ID00002)
|-- Facturacion (ID00002) Aqui llamo a frmSubB(ID00002)
etc...

Los forms son hijos del Panel "panelGran" del frmMain, y


el TreeView tambien
esta en el frmMain. Los eventos para pasar el ID del


arbol hacia los
formularios, ya los tengo, tambien los se cargar dentro


del panelGran como
comenté antes, pero lo que no se, es como descargar los


forms.

Espero que haya quedado mas claro, aun asi, si algo no


se entiende, te lo
puedo explicar mejor.

Gracias de antemano.
Saludos,
Oriol.

"Alejandro Perez" escribió


en el mensaje
news:2e0f001c46a74$9de2bed0$
Hola de nuevo Oriol! Como estas?.

A ver.. si te entendi bien lo que quieres hacer es,
mostrar dentro de un Panel, que esta en
un "frmPrincipal", otros
formularios... "frmSubA", "frmSubB", etc.

Y quieres que solo se muestre un frmSub a la vez? Es
decir, que si vas a mostrar SubB en el panel, se oculte
el que estaba abierto?

Si no es asi, explicanos de nuevo para intentar ayudarte.
Si la cosa es asi, no deberias tener ningun problema
entonces... Simplemente harias algo como que:

if(frmSubA==null)
{
frmSubA = new frmSubClienteDetalle();
frmSubA.TopLevel = false;
frmSubA.Parent = this.panelGran;
}
if(frmSubB!=null)
frmSubB.Hide();

frmSubA.Show();
frmSubA.Activate();

Y asi con todos los formularios.

Avisanos que paso por alla.

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




Hola grupo,

Tengo un pequeño problema, y ademas creo que debe ser


una tonteria pero no
logro dar con la solucion.

Tengo un proyecto en WinForms y C#. En el formulario


principal tengo un
Panel que se llama "panelGran" donde quiero que se


cargue una serie de
informacion en formularios distintos. Tengo creados loa


formularios sin
borde para que queden bien integrados en el form main. A


estos formularios
los llamo asi:

frmSubClienteDetalle frmSubC = new frmSubClienteDetalle


(Idcliente);

frmSubC.TopLevel = false;

frmSubC.Parent = this.panelGran;

frmSubC.Show();

frmSubC.Activate();

Asi, me quedan dentro del panelGran y se mueven y


responden igual que el
resto del formulario.

Mi problema viene cuando intento cargar otro formulario.


Primero tengo que
desactivar o ocultar el que ya esta cargado, pero no se


porque, en el mismo
form main no me permite acceder a frmSubC para poder


ocultarlo o quitarlo.

Alguna sugerencia... estoy un poco agobiado con eso... y


si se puede cargar
los forms de otra forma, siempre que queden embedidos


dentro de panelGran,
todas las opciones seran bien recibidas!

Gracias de antemano!
Oriol.




.





.

Respuesta Responder a este mensaje
#5 Alejandro Perez
16/07/2004 - 21:12 | Informe spam
De nada Oriol y claro que se puede mejorar eso! Esta
hecho como a lo apurado para que mas o menos vieras la
idea.

Lo de los forms lo puedes hacer remplazando ese IF por
una llamada a un metodo tipo:

private void HideForms()
{
foreach(Form objC in panelGran.Controls)
objC.Hide();
}

E incluso! Me gusta mucho mas la idea que crees una clase
base para todos tus forms, esta clase pudiera tener ese
metodo FillForm(IdCliente) y luego lo sobreescribes en
las clases SubForms derivadas de esta. La idea es que asi
no tienes que repetir todo ese codigo de:

if(objfrmSubB==null)
{
objfrmSubB = new frmSubB();
objfrmSubB.TopLevel = false;.etc..etc

para cada form sino que lo abstraes en un solo metodo.
(Herencia por Polimorfismo). Pero igual como esta ahorita
va bien ;) dont worry.

Cuidate Oriol!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela


Hola Alejandro!

GRACIAS! Realmente estaba equivocado en querer crear el


form cada vez. He
seguido tu ejemplo, y me funciona a las mil


maravillas!!!!!!

Mil gracias!

Una ultima pregunta: como tengo 5 forms (frmSubX), hay


alguna forma de no
tener que repetir 5 vezes el IF del Hide con algun for


each o algo asi...
Sino, simplemente pongo 5 ifs y solucionado.

Un abrazo!
Oriol.


"Alejandro Perez" escribió


en el mensaje
news:2d8b701c46b44$d2278510$
Hola Oriol. Lo que no entiendo todavia es porque dices
que no puedes simplemente ocultarlo. Me parece
innecesario estar creando instancias para cada nodo del
treeview. Porque en vez de pasar entonces ese IdCliente
al constructor, no lo pasas a un metodo?.

Yo te dejo aqui el ejemplo de como lo veo, y cuentame en
que es diferente al caso que se te esta presentando:

Bye!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace FormPanel
{
public class frmPrincipal :
System.Windows.Forms.Form
{
private System.Windows.Forms.Panel
panelGran;
frmSubA objfrmSubA;
frmSubB objfrmSubB;
private System.Windows.Forms.TreeView tv;
string IdCliente;

private System.ComponentModel.Container
components = null;

public frmPrincipal()
{
InitializeComponent();
}

protected override void Dispose( bool
disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Código generado por el Diseñador
de Windows Forms
/// <summary>
/// Método necesario para admitir el
Diseñador. No se puede modificar
/// el contenido del método con el editor
de código.
/// </summary>
private void InitializeComponent()
{
this.panelGran = new
System.Windows.Forms.Panel();
this.tv = new
System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// panelGran
//
this.panelGran.BorderStyle >System.Windows.Forms.BorderStyle.FixedSingle;
this.panelGran.Location = new
System.Drawing.Point(160, 40);
this.panelGran.Name = "panelGran";
this.panelGran.Size = new
System.Drawing.Size(456, 288);
this.panelGran.TabIndex = 0;
//
// tv
//
this.tv.ImageIndex = -1;
this.tv.Location = new
System.Drawing.Point(16, 48);
this.tv.Name = "tv";
this.tv.SelectedImageIndex = -1;
this.tv.Size = new
System.Drawing.Size(121, 272);
this.tv.TabIndex = 3;
this.tv.AfterSelect += new
System.Windows.Forms.TreeViewEventHandler
(this.tv_AfterSelect);
//
// frmPrincipal
//
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.ClientSize = new
System.Drawing.Size(632, 342);
this.Controls.Add(this.tv);
this.Controls.Add(this.panelGran);
this.Name = "frmPrincipal";
this.Text = "Form1";
this.Load += new
System.EventHandler(this.frmPrincipal_Load);
this.ResumeLayout(false);

}
#endregion

[STAThread]
static void Main()
{
Application.Run(new frmPrincipal
());
}

private void tv_AfterSelect(object
sender, System.Windows.Forms.TreeViewEventArgs e)
{
switch(e.Node.Tag.ToString())
{
case "INF":

IdCliente=e.Node.Parent.Tag.ToString();
if
(objfrmSubA==null)
{

objfrmSubA = new frmSubA();

objfrmSubA.TopLevel = false;

objfrmSubA.Parent = this.panelGran;
}
if(objfrmSubB!
=null)
{

objfrmSubB.Hide();
}

objfrmSubA.FillForm(IdCliente);
objfrmSubA.Show();

objfrmSubA.Activate();
break;
case "FAC":

IdCliente=e.Node.Parent.Tag.ToString();
if
(objfrmSubB==null)
{

objfrmSubB = new frmSubB();

objfrmSubB.TopLevel = false;

objfrmSubB.Parent = this.panelGran;
}
if(objfrmSubA!
=null)
{

objfrmSubA.Hide();
}

objfrmSubB.FillForm(IdCliente);
objfrmSubB.Show();

objfrmSubB.Activate();
break;
}
}

private void frmPrincipal_Load(object
sender, System.EventArgs e)
{
tv.Nodes.Add(new TreeNode
("Cliente 1"));
tv.Nodes[0].Tag="CLI01";
tv.Nodes[0].Nodes.Add(new TreeNode
("Informacion"));
tv.Nodes[0].Nodes[0].Tag="INF";
tv.Nodes[0].Nodes.Add(new TreeNode
("Facturacion"));
tv.Nodes[0].Nodes[1].Tag="FAC";

tv.Nodes.Add(new TreeNode
("Cliente 2"));
tv.Nodes[1].Tag="CLI02";
tv.Nodes[1].Nodes.Add(new TreeNode
("Informacion"));
tv.Nodes[1].Nodes[0].Tag="INF";
tv.Nodes[1].Nodes.Add(new TreeNode
("Facturacion"));
tv.Nodes[1].Nodes[1].Tag="FAC";
}
}
public class frmSubA : System.Windows.Forms.Form
{
private System.ComponentModel.Container
components = null;

public frmSubA()
{
InitializeComponent();
}
public void FillForm(string IdCliente)
{
//Se muestra toda la facturacion
del cliente
this.Text="Facturacion: " +
IdCliente;
}
protected override void Dispose( bool
disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Código generado por el Diseñador
de Windows Forms
private void InitializeComponent()
{
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.BackColor >System.Drawing.Color.Green;
this.ClientSize = new
System.Drawing.Size(250, 102);
this.Name = "Form2";
this.Text = "Form2";

}
#endregion
}

public class frmSubB : System.Windows.Forms.Form
{
private System.ComponentModel.Container
components = null;

public frmSubB()
{
InitializeComponent();
}
public void FillForm(string IdCliente)
{
//Se muestra toda la info del
cliente
this.Text="Info: " + IdCliente;
}
protected override void Dispose( bool
disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

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

private void InitializeComponent()
{
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.BackColor >System.Drawing.SystemColors.Highlight;
this.ClientSize = new
System.Drawing.Size(250, 94);
this.Name
= "frmSubClienteDetalle";
this.Text
= "frmSubClienteDetalle";

}
#endregion
}
}


Hola Alejandro,

Los formularios de llaman desde un TreeView y se les


pasa un IdCliente. Es
decir, el mismo form puede ser llamado desde diferentes


nodos con parametros
diferentes, con lo cual, creo que no puedo simplemente


ocultar y mostrar el
formulario, sino que cada vez deberia cargarlo y


descargarlo.
Por ejemplo tengo un arbol asi:
Cliente 1
|-- Informacion (ID00001) Aqui llamo a frmSubA(ID00001)
|-- Facturacion (ID00001) Aqui llamo a frmSubB
Cliente 2
|-- Informacion (ID00002) Aqui llamo a frmSubA(ID00002)
|-- Facturacion (ID00002) Aqui llamo a frmSubB(ID00002)
etc...

Los forms son hijos del Panel "panelGran" del frmMain, y


el TreeView tambien
esta en el frmMain. Los eventos para pasar el ID del


arbol hacia los
formularios, ya los tengo, tambien los se cargar dentro


del panelGran como
comenté antes, pero lo que no se, es como descargar los


forms.

Espero que haya quedado mas claro, aun asi, si algo no


se entiende, te lo
puedo explicar mejor.

Gracias de antemano.
Saludos,
Oriol.

"Alejandro Perez" escribió


en el mensaje
news:2e0f001c46a74$9de2bed0$
Hola de nuevo Oriol! Como estas?.

A ver.. si te entendi bien lo que quieres hacer es,
mostrar dentro de un Panel, que esta en
un "frmPrincipal", otros
formularios... "frmSubA", "frmSubB", etc.

Y quieres que solo se muestre un frmSub a la vez? Es
decir, que si vas a mostrar SubB en el panel, se oculte
el que estaba abierto?

Si no es asi, explicanos de nuevo para intentar




ayudarte.
Si la cosa es asi, no deberias tener ningun problema
entonces... Simplemente harias algo como que:

if(frmSubA==null)
{
frmSubA = new frmSubClienteDetalle();
frmSubA.TopLevel = false;
frmSubA.Parent = this.panelGran;
}
if(frmSubB!=null)
frmSubB.Hide();

frmSubA.Show();
frmSubA.Activate();

Y asi con todos los formularios.

Avisanos que paso por alla.

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




Hola grupo,

Tengo un pequeño problema, y ademas creo que debe ser


una tonteria pero no
logro dar con la solucion.

Tengo un proyecto en WinForms y C#. En el formulario


principal tengo un
Panel que se llama "panelGran" donde quiero que se


cargue una serie de
informacion en formularios distintos. Tengo creados loa


formularios sin
borde para que queden bien integrados en el form main.






A
estos formularios
los llamo asi:

frmSubClienteDetalle frmSubC = new frmSubClienteDetalle


(Idcliente);

frmSubC.TopLevel = false;

frmSubC.Parent = this.panelGran;

frmSubC.Show();

frmSubC.Activate();

Asi, me quedan dentro del panelGran y se mueven y


responden igual que el
resto del formulario.

Mi problema viene cuando intento cargar otro






formulario.
Primero tengo que
desactivar o ocultar el que ya esta cargado, pero no se


porque, en el mismo
form main no me permite acceder a frmSubC para poder


ocultarlo o quitarlo.

Alguna sugerencia... estoy un poco agobiado con eso...






y
si se puede cargar
los forms de otra forma, siempre que queden embedidos


dentro de panelGran,
todas las opciones seran bien recibidas!

Gracias de antemano!
Oriol.




.





.





.

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