c# background label

c# - Control transparente sobre PictureBox



background label (5)

En mi formulario C # tengo una etiqueta que muestra un porcentaje de descarga en el evento de descarga:

this.lblprg.Text = overallpercent.ToString("#0") + "%";

La propiedad BackColor del control Label está configurada para ser transparente y quiero que se muestre en un PictureBox. Pero eso no parece funcionar correctamente, veo un fondo gris, no se ve transparente en la parte superior del cuadro de imagen. ¿Cómo puedo arreglar esto?


Al usar Visual Studio con Windows Form, puede aplicar transparencia a las etiquetas u otros elementos al agregar usando System.Drawing; en Form1.Designer.cs De esta manera tendrá Transparencia disponible desde el panel Propiedades (en Apariencia en BackColor). O simplemente edite código en Designer.cs this.label1.BackColor = System.Drawing.Color.Transparent;


El control Label admite bien la transparencia. 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. Me gusta esto:

public Form1() { InitializeComponent(); var pos = this.PointToScreen(label1.Location); pos = pictureBox1.PointToClient(pos); label1.Parent = pictureBox1; label1.Location = pos; label1.BackColor = Color.Transparent; }

Se ve así en tiempo de ejecución:

Otro enfoque es resolver el problema del tiempo de diseño. Eso solo requiere un atributo. Agregue una referencia a System.Design y agregue una clase a su proyecto, pegue 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 {}


Para fácil para su diseño. Puede colocar su etiqueta dentro de un panel. y establecer la imagen de fondo del panel es lo que cada imagen que desea. establecer fondo de etiqueta es transparente


Puede dibujar texto usando TextRenderer que lo dibujará sin fondo:

private void pictureBox1_Paint(object sender, PaintEventArgs e) { TextRenderer.DrawText(e.Graphics, overallpercent.ToString("#0") + "%", this.Font, new Point(10, 10), Color.Red); }

Cuando cambie el valor total en general, actualice pictureBox:

pictureBox1.Refresh();

También puede usar Graphics.DrawString pero TextRenderer.DrawText (usando GDI) es más rápido que DrawString (GDI +)

También mire otra respuesta here y la referencia de DrawText here


Puedes simplemente usar

label1.Parent = pictureBox1; label1.BackColor = Color.Transparent; // You can also set this in the designer, as stated by ElDoRado1239