OBTUVE LA SOLUCION CON 3 CLASES: WINDOWS FORM Y 2 CONTROLES DE USUARIO.
WINDOWS FORM:
Incluye un panel (panel1) y un boton (button1) para mostrar el UserControl1 sobre el panel. Una situacion diferente que se esta presentando que cuando estoy creando un objeto UserControl1 le estoy mandando como parametro el panel (panel1), para que despues el UserControl1 tenga la posibilidad de usar el panel1 y agregar el UserControl2.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
UserControl1 uc1 = new UserControl1(panel1);
panel1.Controls.Add(uc1);
}
}
USERCONTROL1:
Esto a diferencia de lo antes explicado, defino a nivel clase una variable Panel para almacenar el Panel que viene como parametro desde el WindowsForm. Tambie para esto tuve que sobrecargar el constructor recibiendo como parametro un Panel.
Entonces una vez que el evento click del mouse se activa, se crea una instancia de la clase UserControl2 y como ya tenemos el apuntador hacia el panel, que fue lo que recibimos como parametro y luego lo almacenamos en la variable global, ahora si podemos decir que limpie el panel y agregue este nuevo control (UserControl2).
En caso que quieras agregar otro UserControl3 al panel tendrias que mandar de nuevo el Panel hacia el UserControl2 y asi se forma una cadenita.
Otra forma de hacerlo sin necesitar pasar el panel por parametros, es definirlo como estatico y publico, de este modo tu puedes acceder al Panel de cualquier clase como si estuviera en la definido en esa misma clase.
Una cosa importante que se me habia pasado avistarte en este UserControl1 solamente puse un boton que te quita del panel al UserControl1 y te pone al userControl2.
public partial class UserControl1 : UserControl
{
Panel panel;
public UserControl1()
{
InitializeComponent();
}
public UserControl1(Panel p)
{
InitializeComponent();
panel = p;
}
private void button1_Click(object sender, EventArgs e)
{
panel.Controls.Clear();
UserControl2 uc2 = new UserControl2();
panel.Controls.Add(uc2);
}
}
USERCONTROL2:
Y por ultimo al userControl2 no le añadi codigo por que no necesite, solamente le agregue un label para saber si habia sido añadido el control al panel.
Si quieres pasar datos de usercontrol1 hacia el usercontrol2 una manera que lo puedes hacer es por medio de parametros como lo hicimos con el panel.