Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





inclusión dinámica de ocx en C# y .Net 2.0

Iniciado por vincent, 14 de Septiembre de 2007, 01:35:35 PM

« anterior - próximo »

vincent

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
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Vicente

Supongo que no será eso, pero un Visible = true?

Un saludo,

Vicente

vincent

Nops, no es eso.

Intentaré incrustar el ocx en un usercontrol y enchufar el usercontrol dentro del panel a ver si así funciona bien...
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

vincent

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?
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

vincent

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!
Desarrollo en .Net y metodologías http://devnettips.blogspot.com






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.