Comment puis-je régler l'opacité ou la transparence d'un Panneau en WinForms?
Je me demandais comment le changer ou de modifier la transparence d'un Panneau en C#, et non pas l'ensemble de la forme, mais le panneau n'.. j'ai vu beaucoup de C# tutoriels sur l'Opacité, mais pour la Forme. je cherche comment il pourrait être possible avec le Panneau uniquement. Merci!!!!
Vous devez vous connecter pour publier un commentaire.
Oui, l'opacité ne peut fonctionner que sur les fenêtres de niveau supérieur. Il utilise une fonctionnalité matérielle de la carte vidéo, qui ne prend pas en charge l'enfant de windows, comme le Panneau. Le seul haut-niveau de Contrôle de la classe dérivée en Winforms est de la Forme.
Plusieurs de la "pure" Winform contrôles, ceux qui font leur propre peinture au lieu de laisser Windows natif de contrôle de la faire le travail, cependant, support transparent BackColor. Le panneau est l'un d'entre eux. Il utilise un truc, il demande à la Mère de tirer lui-même pour produire le pixel d'arrière-plan. L'un des effets secondaires de cette astuce est que les contrôles ne fonctionne pas, vous ne voyez que le parent pixels, pas de recouvrement des contrôles.
Cet exemple montre une forme au travail:
Si ce n'est pas assez bon alors vous devez tenir compte de l'empilement de formes sur le dessus les uns des autres. Comme ceci.
Notable est peut-être que cette restriction est levée dans Windows 8. Il n'utilise plus la carte vidéo la fonction de superposition et DWM (aka Aero) ne peut pas être éteint plus. Qui fait de l'opacité/transparence sur les fenêtres enfant facile à mettre en œuvre. En s'appuyant sur ce qui est bien sûr l'avenir de la musique pour un certain temps à venir. Windows 7 sera le prochain XP 🙂
Pour celui qui est toujours à la recherche d'une manière totalement transparente panneau, j'ai trouvé une solution sympa dans ce blog par William Smash qui à son tour a pris Tobias Hertkorn sur son T# blog. Je pensais que sa vaut le coup de poster une réponse ici.
De code C#:
VB.Net code:
Basé sur des informations trouvées sur http://www.windows-tech.info/3/53ee08e46d9cb138.php, j'ai été en mesure de réaliser un panneau translucide de contrôle en utilisant le code suivant.
Le problème, c'est que tous les contrôles qui sont ajoutés à la table ronde ont un arrière-plan opaque. Néanmoins, le panneau translucide a été utile pour moi de bloquer les pièces de mon WinForms l'application, de sorte que les utilisateurs l'accent a été déplacé à la zone appropriée de l'application.
N'oubliez pas d'apporter votre Panneau à l'Avant lors de la création dynamique dans le constructeur du formulaire. Exemple de panneau transparent overlay de contrôle onglet.
//<== sinon les autres contrôles de peinture sur le dessus du panneau transparent
Autant que je sache, le Panneau peut avoir une couleur transparente seulement, vous ne pouvez pas contrôler l'opacité du panneau. Donc, vous pouvez avoir quelques pièces d'un panneau complètement transparent, mais pas à 50% - à-dire quelque chose.
D'utiliser la transparence, vous devez définir la propriété "couleur transparente".
Essayez ceci:
changement alpha(A) pour obtenir l'opacité voulue.
Je voulais juste ajouter à la William Smash solution que je ne pouvais pas obtenir de son blog pour que des réponses ont été là à mes questions simples n'a pas pu être trouvé.
M'a pris du temps à réaliser, mais peut-être que j'étais juste avoir un moment...
Si vous n'avez pas eu à le faire donc déjà vous aurez besoin d'ajouter une référence à System.De Windows.Les formes dans les propriétés du projet.
Aussi, vous aurez besoin d'ajouter
pour le fichier dans lequel vous ajoutez les remplacer classe.
Pour OnPaintBackground vous aurez besoin d'ajouter une référence pour le Système.Le dessin,
certains commentaires dit que ça marche et que certains disent qu'il n'est pas
Il ne fonctionne que pour votre
form
fond pas tout autrecontrols
derrièrePanneau avec une opacité:
Cela fonctionne pour moi.
Dans l'exemple ci-dessous, gamme Alpha peut être une valeur entre 0 et 255.
Auparavant, j'ai fait une erreur en pensant qu'il doit être une valeur de pourcentage.
Dim x as integer = 230
Panel1.BackColor = Color.FromArgb(x, Color.Blue)