Domanda Controllo trasparente su PictureBox


Nel mio modulo C # ho un'etichetta che mostra una percentuale di download nell'evento di download:

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

La proprietà BackColor del controllo Label è impostata per essere trasparente e voglio che venga visualizzata su un PictureBox. Ma non sembra funzionare correttamente, vedo uno sfondo grigio, non sembra trasparente sulla parte superiore della finestra. Come posso risolvere questo?


56
2018-02-22 00:03


origine


risposte:


Il controllo Label supporta bene la trasparenza. È solo che il progettista non ti consente di posizionare correttamente l'etichetta. Il controllo PictureBox non è un controllo contenitore, quindi il modulo diventa il padre dell'etichetta. Quindi vedi lo sfondo del modulo.

È facile da risolvere aggiungendo un po 'di codice al costruttore di moduli. È necessario modificare la proprietà Parent dell'etichetta e ricalcolare la sua posizione poiché ora è relativa alla casella immagine anziché al modulo. Come questo:

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

Sembra questo in fase di esecuzione:

enter image description here


Un altro approccio è risolvere il problema in fase di progettazione. Questo richiede solo un attributo. Aggiungi un riferimento a System.Design e aggiungi una classe al tuo progetto, incolla questo codice:

using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;    // Add reference to System.Design

[Designer(typeof(ParentControlDesigner))]
class PictureContainer : PictureBox {}

137
2018-02-22 00:38



Puoi semplicemente usare

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

34
2018-04-12 23:18



Puoi disegnare il testo usando TextRenderer che lo disegna senza sfondo:

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

Quando il valore del valore totale cambia, aggiornare pictureBox:

pictureBox1.Refresh();

È inoltre possibile utilizzare Graphics.DrawString ma TextRenderer.DrawText (utilizzando GDI) è più veloce di DrawString (GDI +)

Guarda anche un'altra risposta Qui e riferimento a DrawText Qui


9
2018-02-22 00:11



Per facile per il tuo design. È possibile posizionare l'etichetta all'interno di un pannello. e impostare l'immagine di sfondo del pannello è ciò che ogni immagine desiderata. impostare lo sfondo dell'etichetta è trasparente


5
2018-04-02 04:05



Utilizzando Visual Studio con Windows Form è possibile applicare la trasparenza alle etichette o ad altri elementi aggiungendo usando System.Drawing; in Form1.Designer.cs In questo modo avrai la trasparenza disponibile dal pannello Proprietà (in Aspetto su BackColor). O semplicemente modifica il codice in Designer.cs this.label1.BackColor = System.Drawing.Color.Transparent;


-2
2018-04-19 13:17