Buenas,
explico el problema que tengo. Tengo una aplicación que dinámicamente tiene que cargar un u otro ocx según la opción que se seleccione.
El tema és que tengo una classe abstracta que es un usercontrol con un panel de la que deriva otro user control. Es sobre este panel que tengo que poner el ocx. El código que utilizo actualmente es el siguiente:
panel = value;
m_iWidth = panel.Width;
m_iHeight = panel.Height;
// Afegim el component al panell
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.panel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.axARV1)).BeginInit();
//
// axARV1
//
this.axARV1.Dock = System.Windows.Forms.DockStyle.Fill;
this.axARV1.Enabled = true;
this.axARV1.Location = new System.Drawing.Point(0, 0);
this.axARV1.Name = "axARV1";
this.axARV1.Size = new System.Drawing.Size(278, 254);
this.axARV1.TabIndex = 0;
panel.Controls.Add(axARV1);
this.panel.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.axARV1)).EndInit();
El tema es que el control no se visualiza, pero si que funciona ( recibo los eventos que tengo que recibir ). El problema es que necesito que se vea pq es para visualización de video.
Que me falta por hacer?
Muchas gracias
Supongo que no será eso, pero un Visible = true?
Un saludo,
Vicente
Nops, no es eso.
Intentaré incrustar el ocx en un usercontrol y enchufar el usercontrol dentro del panel a ver si así funciona bien...
Bueno, al final con un bringtofront se ha solucionado parcialmente el problema.
Lo que pasa, es que yo me quiero enterar de los eventos de click y parecidos, y hay ocx que se quedan con el evento y no lo sueltan. Por eso havia puesto un panel encima, para poder capturarlos. Lo que pasa es que con el bringtofront la teoria del panel se vá al garete porque queda detrás.
Alguna idea de como capturar los eventos?
Bueeeeeno, parece ser que ya hemos solucionado el problema! :D
Al final si que se pueden hacer paneles transparentes para poder capturar los eventos ( o para lo que se necesite ). Para hacerlo se debe crear una clase derivada de Panel que sobrecargue el CreateParams y el OnPaintBackground de la siguiente manera:
public class TransparentPanel : Panel
{
public TransparentPanel()
{
}
//This method makes sure that the background is what is directly behind the control
//and not what is behind the form...
override protected CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
override protected void OnPaintBackground(PaintEventArgs e)
{
// do nothing
}
}
Pués aquí está por si alguien lo necesita.
Saludos!