Contrôles transparents superposés sur une boîte d'image C #: un guide complet
Lorsque vous travaillez avec des formulaires C #, la réalisation de la véritable transparence lorsque les contrôles superposés, tels qu'une étiquette de progrès, sur une boîte d'image peuvent être difficiles. Ce guide aborde le problème commun d'un fond gris apparaissant derrière une étiquette transparente placée sur une boîte d'image.
La racine du problème
Le problème découle du fait que la boîte d'image n'est pas un contrôle de conteneur. Par conséquent, lorsque vous placez une étiquette (ou un autre contrôle) dessus, le parent de l'étiquette devient le formulaire lui-même, pas la boîte d'image. Cela conduit à la couleur d'arrière-plan de la forme qui se manifeste à travers l'étiquette supposée transparent.
La solution: Contrôle d'exécution Parenting
Pour réaliser la transparence souhaitée, vous devez définir dynamiquement le parent de l'étiquette sur la boîte d'image lors de l'exécution. Voici comment:
Affectation des parents: Dans le constructeur de votre formulaire (ou partout approprié), attribuez la boîte d'image en tant que parent de l'étiquette:
<code class="language-csharp">label1.Parent = pictureBox1;</code>
Réglage de l'emplacement: Étant donné que le parent de l'étiquette a changé, son emplacement doit être recalculé par rapport à l'image:
<code class="language-csharp">Point pos = label1.Parent.PointToScreen(label1.Location); pos = pictureBox1.PointToClient(pos); label1.Location = pos;</code>
Réglage de la transparence: Assurez-vous que la couleur d'arrière-plan de l'étiquette est définie sur transparent:
<code class="language-csharp">label1.BackColor = Color.Transparent;</code>
Une solution de conception-temps: contrôle personnalisé
Pour une solution plus élégante qui simplifie le placement en temps de conception des contrôles, créez une classe d'image personnalisée:
Ajouter une référence: Ajouter une référence à System.Design
dans votre projet.
Créer une classe personnalisée: Créer une nouvelle classe héritée de PictureBox
et appliquer un concepteur personnalisé:
<code class="language-csharp">using System.ComponentModel; using System.Windows.Forms; using System.Windows.Forms.Design; [Designer(typeof(ParentControlDesigner))] public class PictureContainer : PictureBox { }</code>
Ce contrôle personnalisé PictureContainer
vous permet désormais de faire glisser et déposer d'autres contrôles directement sur lui pendant la conception, en résolvant le problème de transparence sans code d'exécution. Cette approche offre une expérience de conception plus propre et plus intuitive.
En suivant ces étapes, vous pouvez efficacement superposer des contrôles transparents sur votre PictureBox en C #, en réalisant l'effet visuel souhaité. Choisissez la solution d'exécution ou de conception en fonction des besoins et des préférences de votre projet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!