Boutton ou label invisble mais actif

Noxa Messages postés 1 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 5 juillet 2011 - 5 juil. 2011 à 01:16
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 9 juil. 2011 à 20:33
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

Utilisateur anonyme
9 juil. 2011 à 16:09
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 17:13
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
0
Utilisateur anonyme
9 juil. 2011 à 17:26
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 17:35
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
9 juil. 2011 à 17:47
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 17:47
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 17:50
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
0
Utilisateur anonyme
9 juil. 2011 à 18:02
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 18:04
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
0
Utilisateur anonyme
9 juil. 2011 à 18:07
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 ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 18:14
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 18:18
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
0
Utilisateur anonyme
9 juil. 2011 à 18:18
Tu récupère le contrôle qui déclenche l'événement avec l'objet sender. (qu'il faut caster)
0
Utilisateur anonyme
9 juil. 2011 à 18:26
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 20:30
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 juil. 2011 à 20:33
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
0
Rejoignez-nous