Boutton ou label invisble mais actif

Signaler
Messages postés
1
Date d'inscription
jeudi 1 juin 2006
Statut
Membre
Dernière intervention
5 juillet 2011
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjours a tous , j'aimerais pouvoir cliquer sur un label ou un bouton invisible ,qui serrait placer sur une image par exemple , probleme lorsqu'un bouton ou un label est invisble , les actions prevus ne s'effectuent pas lorsque je clic (mon bouton ou mon label devront etre place devant une image (PictureBox)

Merci de m'aider

Bonne prog a tous.......

16 réponses


Bonjour,

Bien que je ne vois pas trop bien l'intérêt de ta méthode, tu peux très bien te servir de la classe Rectangle afin de déterminer si les
coordonnées d'un clic dans ton picturebox se situent dans la zone d'un Label non visible.
Il serait plus simple d'utiliser les événements Mouse (down, up, click ...) du picturebox.
Pour tester l'exemple suivant, place un label "Label1" dans ton picturebox et met sa propriété visible à False.

Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    If Rectangle.Intersect(Label1.Bounds, New Rectangle(e.X, e.Y, 1, 1)) <> Rectangle.Empty Then
        MessageBox.Show("ok")
    End If
End Sub

A bientôt.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,

On touche là, je crois, à un autre point de faiblesse par rapport à VB6.
Sous VB6, en effet, il suffirait d'utiliser un label transparent, pour qu'il laisse passer l'image de la picturebox. Et un tel label est cliquable.
Sous VB.Net, le comportement est différent et un label transparent placé sur une pictureboc "troue" également la picturebox pour afficher la couleur de fond du Form !
La solution de banana32 est viable, mais il est regrettable d'être obligé d'en arriver là !
Cela fait combien d'années, maintenant, que VB.Net est sorti ?


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Il faut vivre avec son temps ucfoutu
Je redis que ne vois pas trop l'intérêt de placer un label invisible sur un picturebox.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Il faut vivre avec son temps ucfoutu
Je redis que ne vois pas trop l'intérêt de placer un label invisible sur un picturebox.

1) Pour moi, "vivre avec son temps" ne signifie rien si, "vivant avec un temps de retard", je parviens à faire mieux
Et ce n'est pas le seul point (celui-là) qui m'a fait décider de ne pas "migrer". Si je devais un jour abandonner VB6, ce sera pour passer à autre chose que VB, carrément
Mais bon ...
2) que tu ne vois pas, toi, l'intérêt possible de ce qui est ici demandé est un fait. Tel n'est pas mon point de vue. Les applications possibles sont assez nombreuses !
Mais bon, là aussi ...
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Sous VB6, en effet, il suffirait d'utiliser un label transparent, pour qu'il laisse passer l'image de la picturebox. Et un tel label est cliquable.


On peut aussi très bien le faire aussi en .NET à condition que picturebox soit le parent du label.
Ainsi le label se superpose bien sur l'image et est parfaitement transparent.
Et il est par conséquent cliquable.
Label1.Parent = PictureBox1
Label2.BackColor = Color.Transparent


Mais dans la question posée, le label doit être invisible et cliquable.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Maintenant, banana32 ===>>
pense aux ralentissements divers et variés qu'occasionnerait, sous VB.net, l'exécution de ton code, mais cette fois-ci au "Mouse_Move" de ta picturebox et avec plusieurs labels !
Sous VB6, on peut non seulement utiliser le mouse_move de chacun des labels (directement), mais également (cerise sur le gâteau) conjuguer avec un groupe de labels indexés (de manière native), ce qui se gèrerait par un seul évènement Mouse_Move (celui du groupe des labels, car il a un paramètre Index)


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
On peut aussi très bien le faire aussi en .NET à condition que picturebox soit le parent du label.
Ainsi le label se superpose bien sur l'image et est parfaitement transparent.

on lit pourtant partout sur la toile que non ! un tel label transparent "trouerait" la picturebox et laisserait passer le background du Form


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

on lit pourtant partout sur la toile que non ! un tel label transparent "trouerait" la picturebox et laisserait passer le background du Form

Si le parent du label n'est pas explicite dans le code, en effet, il ne peut être transparent que pour le formulaire sur lequel il est placé et sa transparence reproduit donc la couleur de fond du formulaire (logique)

mais également (cerise sur le gâteau) conjuguer avec un groupe de labels indexés

Je ne cerne pas bien ta cerise
En .NET il suffit de rajouter l'instruction Handles en fin d'une procédure devant gérer des événements.
Ce qui est bien plus pratique que les index finalement.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Et même si cela fonctionnait ainsi (en mettant le label DANS et pas simplement AU-DESSUS) :
Il est anormal d'être ainsi "bridé"


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Mais justement, en VB6 n'importe quel contrôle placé sur un autre devient automatiquement son enfant ce qui peut être très gênant ne trouves-tu pas ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Non !
Sous VB6 un contrôle ne devient l'enfant d'un container que si placé DANS ce conteneur.
Quant à ton remplacement des groupes de contrôles indexés de VB6, je ne suis pas d'accord car ta méthode ne distinguerait pas quel contrôle (parmi tes handles) correspond à l'évènement.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
et voilà ce qu'il faudrait mettre en oeuvre sous VB.Net pour avoir l'équivalent de ce qu'offre nativement VB6 :

A lire, donc
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Tu récupère le contrôle qui déclenche l'événement avec l'objet sender. (qu'il faut caster)

L'avantage c'est que n'importe quel contrôle ayant un événement de même signature peut être traité par une seule et même procédure.
Ce qui, avoue le, peut réduire considérablement le nombre de lignes de code.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Je n'en vois pas le réel intérêt (sauf cas assez rares et avec expressions conditionnelles).
J'en vois par contre un très appréciable lorsque (c'est le cas sous VB6) on peut agir, grâce à leur index, sur plusieurs contrôles de groupes indexés différents mais partageant, au sein de chaque groupe, la même valeur d'index


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Mais pour en revenir à la demande de Noxa.
Un contrôle "invisible" n'est pas forcément un contrôle dont la propriété visible est à False.
Un contrôle transparent est également invisible (il ne se voit pas).
Et Noxa a donc obtenu sa réponse dans le cours de cette discussion.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP