Réglage de la mère d'un usercontrol l'empêche d'être transparent
J'ai créé un simple contrôle de l'utilisateur qui est créé manuellement avec quelque chose comme
MyUserControl ctrl = new MyUserControl();
Le contrôle ont été conçus pour avoir BackColor = Color.Transparent et qui fonctionne très bien, jusqu'à ce que j'ai défini la Parent du contrôle à un formulaire au moment où il prend la couleur de la forme.
Peut sembler transparent, mais ce qu'il fait est de masquer tous les contrôles qui existent sur le formulaire. Je ne suis pas sûr à 100% de son contrôle qui obtient un solide arrière-plan ou quelque chose des thats passe quand je le brancher, ce qui empêche d'autres contrôles à partir de l'affichage.
En gros, si vous faites cela
- Créer un formulaire
- Chute d'un bouton
- Dans le gestionnaire d'événements click pour le bouton, vous effectuez les opérations suivantes
Exemple
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();
Fondamentalement, je veux le contrôle usercontrol à la superposition de l'ensemble de la forme, tout en montrant les sous-tendre les contrôles sur le formulaire (d'où le fond transparent). Je ne veux pas ajouter à la formes de contrôle de la collecte, car il n'appartient pas vraiment à la forme, c'est juste d'être montré ontop de tout le reste
J'ai essayé de faire la même chose, mais sans réglage de la mère, mais alors le contrôle na pas montrer à tous.
Merci!
EDIT: Si je remplace le OnPaintBackground méthode dans le contrôle usercontrol et de prévenir l'arrière-plan de cours de peinture, puis il travaille, cependant que des mess avec les parties transparentes de l'image PNG im peinture dans le contrôle à l'aide DrawImage, qui fait sens.
OriginalL'auteur TheCodeJunkie | 2008-12-17
Vous devez vous connecter pour publier un commentaire.
Windows Forms ne soutiennent pas vraiment contrôles transparents.
Vous pouvez contourner cette limitation en remplaçant la propriété CreateParams de contrôle et de réglage un style personnalisé (chercher sur google).
En outre, vous devez remplacer la peinture de votre commande de sorte que non seulement votre contrôle, mais aussi le contrôle parent est redessiné. La raison en est que l'arrière-plan doit être peint avant votre contrôle peint lui-même.
Enfin, vous devez remplacer le OnPaintBackground méthode, comme vous l'avez fait, pour s'assurer qu'aucun de fond est peint.
Assez maladroit, et il n'est pas parfait, mais il devrait fonctionner.
Non, je pense que tu veux dire WS_EX_TRANSPARENT
J'ai juste regardé. vous devriez OU la ExStyle propriété de la CreateParams objets avec EX_TRANSPARENT (0x00000020)
OriginalL'auteur Rune Grimstad