2012-07-10 19 views
14

Avendo due sovrapposizioni di PictureBox controls, sto cercando di rendere le aree trasparenti della casella di immagine che i controlli di seguito (nell'ordine z) siano visibili.È possibile avere due controlli PictureBox sovrapposti con immagini trasparenti?

Anche dopo trying what Microsoft suggests, non riesco a ottenere il risultato desiderato.

Questo è quello che ho attualmente:

enter image description here

E questo è ciò che voglio:

enter image description here

Quindi la mia domanda è:

Un modo per raggiungere il risultato desiderato con due PictureBox controlli (o in altro modo) che si sovrappongono e lascia trasparire le aree trasparenti?

Aggiornamento:

In realtà ho risolto utilizzando this answer alla domanda SO "Transparent images with C# WinForms".

+0

qual è l'ext delle immagini? – sikas

+0

@sikas Lo scudo è un file PNG con canale alfa. Perché dovrebbe essere importante? –

+1

WinForms non supporta questo per impostazione predefinita. Devi fare degli hack di disegno molto interessanti per farlo funzionare. WPF, tuttavia, lo fa senza intoppi. –

risposta

2

Per quanto ne so, la trasparenza di un controllo dipende dal controllo genitore (come indicato nel link che hai fornito), il che significa che per avere l'effetto che stai cercando, devi averne uno picture box annidato in un'altra finestra di immagine che è impossibile dato che una casella di immagine non è un contenitore.

È tuttavia possibile utilizzare un controllo contenitore personalizzato anziché una casella immagine per l'immagine principale. Il controllo di base sarebbe un pannello. Basta impostare l'immagine di sfondo del controllo e inserire la seconda casella di immagine in esso.

Un'altra soluzione, sarebbe quella di utilizzare una singola casella di immagine e gestire il rendering manualmente.

Questa è di gran lunga la soluzione migliore in quanto la trasparenza pseudo-simulata dell'altro metodo è silenziosa inefficiente.

16

Prova questa

private void Form1_Load(object sender, EventArgs e) 
{ 
    // Transparent background... 
    pictureBoxOverlay.BackColor = Color.Transparent; 

    // Change parent for overlay PictureBox... 
    pictureBoxOverlay.Parent = pictureBoxMain; 

// Change overlay PictureBox position in new parent... 
// pictureBoxOverlay.Location = new Point(0, 0); 
} 

Risultato

enter image description here

llink

+0

Grazie, questo funziona a meno che la casella immagine di sovrapposizione non sia ritagliata dalla casella immagine. Ho bisogno che si sovrappongano solo parzialmente. –