Stworzyłem prostą kontrolę użytkownika, który jest ręcznie utworzoną z czymś jakUstawianie rodzica usercontrol uniemożliwia bycie przejrzysty
MyUserControl ctrl = new MyUserControl();
Sterowanie zostały zaprojektowane, aby mieć BackColor = Color.Transparent i to działa dobrze, dopóki nie ustawię formantu kontrolki w formularzu, kiedy to zmieni się w kolor formularza.
Może brzmieć jak przezroczysty, ale to, co robi, to ukryć wszystkie kontrolki, które istnieją również w formularzu. Nie jestem w 100% pewien, czy to kontrola, która dostaje stałe tło, czy coś innego, co dzieje się po podłączeniu, co uniemożliwia wyświetlanie innych kontrolek.
Zasadniczo, jeśli można to zrobić
- Tworzenie formularza
- Upuść przycisk na nim
- W obsługi kliknij na przycisku, który ma następujące
Przykład
MyUserControl ctrl = new MyUserControl();
ctrl.Parent = this;
ctrl.BackColor = Color.Transparent;
ctrl.Size = this.Parent.ClientRectangle.Size;
ctrl.Location = this.Parent.ClientRectangle.Location;
ctrl.BringToFront();
ctrl.Show();
Zasadniczo ja chcesz, aby kontrolka użytkownika nakładała cały formularz, jednocześnie pokazując kontrolki underlayingu w formularzu (stąd przezroczyste tło). Nie chcę dodawać go do kolekcji kontrolek formularzy, ponieważ tak naprawdę nie należy do formularza, jest po prostu pokazany na szczycie wszystkiego, co jeszcze jest,
Próbowałem zrobić to samo, ale bez ustawienia rodzica, ale potem kontrola wcale się nie pojawiła.
Dzięki!
EDYCJA: Jeśli przesłonię metodę OnPaintBackground w kontrolerze użytkownika i zapobiegnę pomalowaniu tła, to działa, jakkolwiek, że to mes Messa z przezroczystymi częściami obrazu PNG im obraz w kontroli za pomocą DrawImage, co ma sens.
Czy chcesz używać flagi WS_CLIPCHILDREN podczas tworzenia okna kontrolnego? – TheCodeJunkie
Nie Myślę, że masz na myśli WS_EX_TRANSPARENT – TheCodeJunkie
Po prostu to sprawdziłem. powinieneś użyć OR właściwości ExStyle obiektów CreateParams z EX_TRANSPARENT (0x00000020) –