El control Label admite transparencias. Es solo que el diseñador no le permitirá colocar la etiqueta correctamente. El control PictureBox no es un control de contenedor, por lo que el formulario se convierte en el elemento primario de la etiqueta. Entonces ves el fondo del formulario.
Es fácil de arreglar agregando un poco de código al constructor de formulario. Tendrá que cambiar la propiedad principal de la etiqueta y volver a calcular su ubicación, ya que ahora está relacionada con el cuadro de imagen en lugar del formulario. De esta manera:
public Form1() {
InitializeComponent();
var pos = this.PointToScreen(label1.Location);
pos = pictureBox1.PointToClient(pos);
label1.Parent = pictureBox1;
label1.Location = pos;
label1.BackColor = Color.Transparent;
}
tiene este aspecto en tiempo de ejecución:
Otro enfoque es resolver el problema en tiempo de diseño. Eso solo requiere un atributo. Añadir una referencia a System.Design y añadir una clase a su proyecto, pega este código:
using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design; // Add reference to System.Design
[Designer(typeof(ParentControlDesigner))]
class PictureContainer : PictureBox {}
Gracias, funciona perfectamente pero el cuadro de imagen es una ProgressBar personalizada y los detalles de la descarga no aparecen hasta que ProgressBar aumenta en la ubicación de la etiqueta, ¿cómo puedo hacerlo visible siempre y no solo cuando ProgressBar lo toca? Aquí una! [Imagen] (http: //i.imm.io/h342.jpeg) – Derezzed
Hice esto, hasta que me di cuenta de que no necesitaba una imagen. El control Label tiene una propiedad de imagen que podría ser suficiente si los escenarios simples no requieren formato de imagen. – Larry
Esto funciona solo si tiene un cuadro de imagen antes de la etiqueta y no varias ... – alap