2012-07-10 15 views
14

Po dwóch zachodzących na siebie PictureBox controls, próbuję utworzyć przezroczyste obszary ramki graficznej, aby kontrolki poniżej (w kolejności z) były widoczne.Czy można uzyskać dwa zachodzące na siebie elementy sterujące PictureBox z przezroczystymi obrazami?

Nawet po trying what Microsoft suggests, nie mogę uzyskać pożądanego rezultatu.

To co obecnie mam:

enter image description here

I to jest to, co chcę:

enter image description here

Więc moje pytanie brzmi:

Jakikolwiek sposób osiągnąć pożądany wynik z dwoma PictureBox kontrole (lub w inny sposób), które nakładają się na siebie i pozwalają prześwitywać przez przezroczyste obszary?

Aktualizacja:

Właściwie to rozwiązać go za pomocą this answer na pytanie SO "Transparent images with C# WinForms".

+0

co jest ext obrazów? – sikas

+0

@sikas Tarcza jest plikiem PNG z kanałem alfa. Dlaczego miałoby to być ważne? –

+1

WinForms nie obsługuje tego domyślnie. Trzeba zrobić kilka bardzo interesujących hacków rysunkowych, aby to zadziałało. Jednak WPF robi to bez problemu. –

Odpowiedz

2

O ile mi wiadomo, przejrzystość kontroli zależy od kontroli nad nią (Jak wspomniano w podanym łączu), co oznacza, że ​​aby uzyskać efekt, którego szukasz, musisz go mieć. ramka graficzna zagnieżdżona w innym polu graficznym, co jest niemożliwe, ponieważ ramka graficzna nie jest kontenerem.

Można jednak użyć niestandardowego kontrolki kontenera zamiast ramki graficznej dla obrazu macierzystego. Najbardziej podstawową regulacją będzie panel. Wystarczy ustawić obraz tła kontrolki i umieścić w nim drugie pole graficzne.

Innym rozwiązaniem byłoby użycie pojedynczego pudełka z obrazami i ręczne zarządzanie renderowaniem.

Jest to zdecydowanie najlepsze rozwiązanie, ponieważ pseudo-symulowana przezroczystość drugiej metody jest cicha i nieefektywna.

16

Spróbuj

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); 
} 

Wynik

enter image description here

llink

+0

Dzięki temu działa, o ile pole obrazu z nakładką nie zostanie przycięte przez ramkę graficzną. Potrzebuję ich tylko częściowo zachodzić na siebie. –

Powiązane problemy