Question

I ai un usercontrol (.NET Winforms 1.1) qui a une picturebox cliquable comme un bouton.

Depuis que j'ai beaucoup de ces usercontrols visibles en même temps, je pensais que ce pourrait être bien si je n'affiche que la zone d'image lorsque la souris est sur la usercontrol et cache autrement.

Pour ce faire, je gérer les événements MouseEnter et MouseLeave du UserControl, se cachant et l'affichage de la picturebox. Cela fonctionne très bien.

Mais quand le cliquable picturebox est visible, je ne suis pas plus en mesure de cliquer dessus (le curseur de la main est parti et l'événement de clic ne se déclenche pas).

Après un test, je me rends compte que si un commentaire tout le contenu du gestionnaire MouseLeave que faire quelque chose avec mon picturebox ... Ainsi, le picturebox est cliquable.

Je ne suis pas en utilisant l'événement correct?

Il y a une autre façon d'y parvenir?

Voici le code ...

Private Sub NodoEstablo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.pictAdd.Visible = False 
End Sub


Private Sub NodoEstablo_MouseEnters(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter        
    Me.pictAdd.Visible = True
End Sub

Le gestionnaire d'événements problématique:

Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
    Me.pictAdd.Visible = False
End Sub

Mise à jour: Si je redimensionnez la picturebox sur MouseLeave (juste pour faire quelque chose) cela fonctionne. Jusqu'à présent, le changement visible et emplacement dans le MouseLeave me empêche de cliquer sur le picturebox. : S

Était-ce utile?

La solution

Quand les mouvements de la souris sur le bouton, quelque chose de semblable à ce qui suit Happens:

  1. La souris quitte la usercontrol (même si elle est encore à l'intérieur du contrôle) et entre dans la picturebox
    • Vos feux de MouseLeave gestionnaire d'événements, ce qui rend le picturebox pas visible
  2. Parce que la picturebox n'est pas visible, la souris quitte la picturebox et entre dans la usercontrol
    • Vos feux de MouseEnter gestionnaire d'événements, ce qui rend le picturebox visible
  3. Parce que la picturebox est maintenant visible, le processus recommence depuis le début

Quand je teste votre code, le « bouton » vacillait en continu (comme il a gardé avoir sa visibilité basculée) et n'a pas pu rester assez longtemps visible pour enregistrer tous les clics.

Une façon d'aborder c'est de modifier votre gestionnaire d'être MouseLeaves quelque chose comme ceci:

Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, _
                                    ByVal e As System.EventArgs) _
                                    Handles MyBase.MouseLeave
    If Not ClientRectangle.Contains(PointToClient(Cursor.Position)) Then
        Me.pictAdd.Visible = False
    EndIf
End Sub

vérifie pour vous assurer que la souris a effectivement quitté le contrôle avant de faire disparaître le bouton.

Modification de la taille de l'picturebox peut avoir rompu le cycle décrit ci-dessus, mais il ne résout pas le problème fondamental.

Voici quelques autres (qui ont rien à voir avec votre question) à considérer:

  • Je pense qu'il est recommandé que vous remplacez juste le OnMouseLeaves, méthodes etc dans votre usercontrol, au lieu de souscrire aux événements correspondants.
  • Rappelez-vous que les contrôles de manipulation de cette façon, il peut être impossible pour quelqu'un d'utiliser votre application avec un clavier uniquement. (À savoir l'utilisateur ne peut pas Tab à votre bouton et appuyez sur Entrée )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top