De Contrôle de l'utilisateur avec un fond transparent
J'ai un simple contrôle de l'utilisateur qui est en fait juste un panneau, quand je clique dans le panneau, il y aura un enfant de contrôle de l'utilisateur ajouté. cet enfant est juste un autre utilisateur de contrôler où j'ai mis width = 150px
& height = 100px
et la couleur d'arrière-plan transparent. il a aussi une zone de texte dans le centre est de 100 x 100 px.
cette structure de base sera un Nœud en Fonction de l'Interface dans le futur, où chaque zone de connexion ancres et de la logique btn ou quelque chose comme ça.
mon problème est que si je clique plusieurs fois dans le panneau de la boîte de overlapy l'autre, la transparence ne prendra pas effet.
voici une capture d'écran
comment puis-je résoudre ce problème ? est-il un allowTransparency
ou quelque chose comme ça ?
il y a aussi un problème avec l'ordre de le dessin, les nouveaux blocs sont toujours derrière l'autre.
si vous souhaitez voir le code pour cela, laissez-moi savoir , mais je ne pense pas qu'il n'y a rien de pertinent pour cela.
aussi, si vous connaissez une meilleure façon de mettre en œuvre un nœud graphique, n'hésitez pas à me le dire.
MODIFIER
code suivant a été la première chose que j'ai essayé avant, j'ai même pensé à poster une question dans StackOverFlow.
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
MakeTransparentControls(this);
de sorte s'il vous plaît ne prenez pas cela comme une double question, ou de poster ce code comme réponse
c'est l'un des problèmes actuels, oui
Essayez mon approche dans ceci post. Il fonctionne parfaitement.
OriginalL'auteur Ace | 2013-01-20
Vous devez vous connecter pour publier un commentaire.
C'est en général très fondamentale restriction de Windows. Une fenêtre chevauche une autre fenêtre et fait obstacle à tout ce qui est derrière elle. Tout le monde préféré de réponse, utilisez ControlStyles.SupportsTransparentBackColor, n'est pas une solution, il est déjà activé pour UserControl paramètre de nouveau ne fait aucune différence.
Le style drapeau simule la transparence de la fenêtre. Il le fait en modifiant la façon dont la fenêtre se peint. Il demande d'abord le Parent à se dessiner à l'intérieur de la fenêtre de fournir l'arrière-plan, puis tire au-dessus d'elle. Donc, en définissant la propriété BackColor de la Couleur.Transparent, vous pouvez vous attendre à voir le Parent de la fenêtre de pixels que celui de l'arrière-plan.
Et vous le faites. Le Parent de votre contrôle de l'utilisateur est de la forme. Il ajouta à tire d'abord et qui produit le gris bords sur la gauche et la droite. Ce que vous espère était aussi de voir les pixels des autres commandes de l'utilisateur. Mais cela ne fonctionne pas, il ne demande à la Mère de tirer, de ne pas tout autres de contrôle qui se chevauchent. Qui n'est certainement pas impossible, c'est juste laid et lent. Cette L'article montre l'approche. Plutôt l'accent sur le "laid" moniker.
Clairement, vous pouvez améliorer votre UserControl, il n'y a à priori aucune raison d'en avoir la transparence de ces bords à gauche et à droite du Panneau. Le panneau de l'Emplacement de la propriété de (0, 0) et de la propriété Dock de Remplissage. Désormais, chaque utilisateur contrôle est rien, mais un "nœud" et vous n'avez pas besoin ni envie de voir des morceaux de tout se chevauchent d'autres "nœud". Dessin les lignes entre les nœuds va nécessiter la mise en œuvre de la Peinture de l'événement de la forme.
Si vous avez vraiment besoin de ce genre de transparence, alors vous allez avoir à le faire de façon différente. Vous avez à renoncer à l'idée d'utiliser une fenêtre pour chaque nœud. Une façon de le faire est de les peindre. Si vous le faites dans le bon ordre, alors vous n'aurez aucun problème à simuler une véritable transparence, créé par la superposition de couches de peinture et de tout simplement pas de tirage où vous avez besoin de voir le "fond". Il sera également beaucoup plus rapide, les contrôles sont chers. Cependant, vous aurez à renoncer à la commodité d'utilisation de commandes, vous aurez à écrire le code à la place. Des choses comme la souris frapper les tests deviennent plus compliquées. Et la zone de texte sera certainement un raccrochage si elle n'est pas censée être une Étiquette (sûrement?) Ou utiliser une interface graphique, la bibliothèque de la classe qui a renoncé à l'aide d'une fenêtre de contrôle. Comme WPF. Et n'oubliez pas qu'il ya beaucoup de bibliothèques qui ont déjà le faire pour vous, nœuds connectés sont une interface utilisateur commune de paradigme. Visio par exemple.
j'ai aussi pensé à utiliser libarys que faire ce dont j'ai besoin, mais la tâche est de faire mon propre Nœud du Graphe. donc, en utilisant une bibliothèque serait mon dernier choix , mais je ne pouvais les regarder ar la source et lern quelques trucs je pense.
OriginalL'auteur Hans Passant
essayer cette méthode dans le constructeur de votre UserControl:
OriginalL'auteur Aniket Inge
Vous pouvez aussi essayer ceci :
OriginalL'auteur MFUser
Dans un de mes projets j'ai dû mettre un fond transparent pour presque tous les enfants de contrôle sur la Forme, j'ai donc créé cette méthode:
Et dans la forme du constructeur, j'ai ajouté ces lignes:
Vous pouvez essayer quelque chose comme cela dans votre propre contexte.
OriginalL'auteur Konrad Gadzina