Domanda

Sto per perdere la mia mente qui.
Perché non il la miscela di controllo casella di controllo con quello che c'è dietro?
La questione si applica a tutti i controlli WinForms, ma sto usando questo come un esempio.

Una foto vale più di mille parole:

alt text

E qualche parola di più:
Cosa c'è dietro il CheckBox sono PictureBoxes e un Button colorato.
CheckBox del BackColor è impostato su Transparent. Ma in qualche modo decide che che significa che dovrebbe condividere la BackColor del Form contenente (è che la sua idea di illusione della trasparenza?).

E 'questo non è possibile in WinForms? Potrei giurare che ho fatto prima.

UPDATE:
Ho appena provato questo:
Su quella forma, impostare CheckBox del BackColor per Transparent, quindi modificare il BackColor del Form contenente a qualche altro colore, e il CheckBox corrisponderà che BackColor. Quello che il .......?

È stato utile?

Soluzione

Bob Powell ha scritto un ottimo articolo su controlli trasparenti. Check it out:

http://www.bobpowell.net/transcontrols.htm

Altri suggerimenti

Questo è un effetto collaterale di controlli che sono le finestre di Windows. Una finestra è responsabile della redazione stessa, i metodi e OnPaintBackground OnPaint prendersi cura di questo.

Questo modello di rendering non supporta bene la trasparenza. V'è il supporto per la vera trasparenza utilizzando finestre sovrapposte. Questo è implementata dalla scheda video, Windows utilizza funzionalità di sovrapposizione hardware. Ma che funziona solo per le finestre principali, non le finestre figlio. Notare le proprietà Form.Opacity e Form.TransparencyKey.

Non c'è supporto parziale per la trasparenza attraverso un trucco. Un controllo può fingere chiedendo la finestra padre per disegnare se stesso prima all'interno della finestra di controllo. Che produce i pixel dello sfondo, si può quindi disegnare in cima a quello. L'impostazione della proprietà BackColor Color.Transparent permette questo trucco per i controlli che supportano questa. Tutto il ButtonBase derivato classi fanno. Ma non controlli che sono wrapper per controlli nativi di Windows.

"Chiedere la finestra padre" è dove il difetto in questo trucco diventa visibile nella vostra schermata. Stai visualizzando i pixel di forma. effetti impilabili non funzionano, non è mai considera qualsiasi finestra intermediaria nella Z-ordine, solo il genitore. Questo è risolvibile, ma molto brutto, c'è un articolo KB che mostrano il codice.

Anche È da notare che WPF non ha questa limitazione. I controlli non sono finestre, rendono da soli pittura sulla parte superiore del genitore. Strati di vernice. La trasparenza è ormai banale, solo che non dipinge.

Si può impostare il colore di sfondo della casella di controllo manuale per il colore che si desidera? (Il valore nel picturebox dietro di esso)

'Trasparente' può significare qualcosa di diverso da ciò che si desidera MS.

Inoltre, provare a cambiare lo ZOrder dei PictureBoxes (portare in primo piano) e vedere se che cambia colore sottostante del casella di controllo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top