He intentado mostrar una imagen que tiene un borde transparente como fondo de un control.Control de dibujo con fondo transparente
Desafortunadamente, el área transparente crea un agujero en el formulario principal de la siguiente manera:
En la imagen anterior, la forma tiene un fondo de color rojo que yo esperaba ver detrás de mi control en las áreas transparentes.
El código I utilizada es la siguiente:
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if (this.Image != null)
{
Graphics g = Graphics.FromImage(this.Image);
ImageAttributes attr = new ImageAttributes();
//set the transparency based on the top left pixel
attr.SetColorKey((this.Image as Bitmap).GetPixel(0, 0), (this.Image as Bitmap).GetPixel(0, 0));
//draw the image using the image attributes.
Rectangle dstRect = new Rectangle(0, 0, this.Image.Width, this.Image.Height);
e.Graphics.DrawImage(this.Image, dstRect, 0, 0, this.Image.Width, this.Image.Height,
GraphicsUnit.Pixel, attr);
}
else
{
base.OnPaint(e);
}
}
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
{
//base.OnPaintBackground(e);
}
Esta clase se hereda de un cuadro de imagen porque necesitaba un control que implementa onMouseMove y onMouseUp Events.
He estado investigando la mayor parte del día sin éxito probando diferentes ideas, pero desafortunadamente la mayoría solo funciona en el framework completo y no en .Net CF.
Cualquier idea sería muy apreciada.
Wow, gracias por eso. Una explicación extremadamente útil y detallada. Ciertamente has dedicado algo de tiempo al tema. –
@ctacke Se me ocurrió una solución de Transparencia que está muy cerca de la tuya, y funciona tanto en el diseñador como en el tiempo de ejecución. Recientemente me di cuenta de que mi solución no funcionará al anidar Controles de Contenedor porque la función "Parent.Parent" no funciona. Intenté cambiar "Parent.Parent" a este. Top Control de nivel, que funciona en tiempo de ejecución pero no en tiempo de diseño. ¿Alguna vez ha podido obtener una solución para anidar controles transparentes dentro de los controles del contenedor y todavía tiene el diseñador que haga que su control sea transparente? –
Dejé de intentar incluso obtener soporte de diseñador para mis controles hace años. Simplemente nunca me pareció tan importante y siempre fue frágil.A veces funcionaría, otras veces no funcionaría y me encontré ardiendo días sin hacer nada productivo, así que nunca me molesté con el diseñador, ni mucho menos para diseñar los rectángulos donde irán los controles. – ctacke