IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Je maitrise pas du tout le MouseHover et/ou le MouseEnter [Débutant]


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    personnel
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : personnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Je maitrise pas du tout le MouseHover et/ou le MouseEnter
    Bonjour,
    Dans un form j'ai plusieurs control et j'aimerai qu'ils changent de couleur de fond au survol.
    je voulais savoir s'il fallait créer une sub pour chaque control ou pas ?
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub survol_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nom.MouseHover, prenom.MouseHover
            If Me.Controls("nom").Focused = True Then Me.Controls("nom").BackColor = Color.AliceBlue
            If Me.Controls("prenom").Focused = True Then Me.Controls("prenom").BackColor = Color.AliceBlue
        End Sub
        Private Sub nosurvol_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nom.MouseLeave, prenom.MouseLeave
            If Me.Controls("nom").Focused = False Then Me.Controls("nom").BackColor = Color.White
            If Me.Controls("prenom").Focused = False Then Me.Controls("prenom").BackColor = Color.White
        End Sub
    Avec ce code, un coup c'est un control qui change un coup c'est l'autre etc.
    J'ai essayé avec le MouseEnter : mêmes résultats.
    Si quelqu'un peut m'aider SVP.
    Par avance merci.
    JLP.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par jlp13012 Voir le message
    Bonjour,
    Dans un form j'ai plusieurs control et j'aimerai qu'ils changent de couleur de fond au survol.
    je voulais savoir s'il fallait créer une sub pour chaque control ou pas ?
    Ma boule de cristal me dit que c'est un choix personnel. L'objet Sender supporte la propriété Name qui renvoie le nom du composant qui a déclenché l'événement.


    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub survol_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nom.MouseHover, prenom.MouseHover
            If Me.Controls("nom").Focused = True Then Me.Controls("nom").BackColor = Color.AliceBlue
            If Me.Controls("prenom").Focused = True Then Me.Controls("prenom").BackColor = Color.AliceBlue
        End Sub
        Private Sub nosurvol_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nom.MouseLeave, prenom.MouseLeave
            If Me.Controls("nom").Focused = False Then Me.Controls("nom").BackColor = Color.White
            If Me.Controls("prenom").Focused = False Then Me.Controls("prenom").BackColor = Color.White
        End Sub
    Avec ce code, un coup c'est un control qui change un coup c'est l'autre etc.
    J'ai essayé avec le MouseEnter : mêmes résultats.
    Si quelqu'un peut m'aider SVP.
    Par avance merci.
    JLP.
    Là ma boule de cristal est cassée.
    As-tu juste essayé au pas-à-pas ?
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par jlp13012 Voir le message
    Bonjour,

    Personne peut m'aider ?

    Merci.
    JLP.
    Compte toi chanceux. Les "insistants" qui exigent une réponse, surtout en fin de semaine, j'ai l'habitude de les envoyer au diable.

    C'est un forum d'entraide où ceux qui répondent, le font bénévolement, au hasard de leur disponibilité.


    P.S. Ta question est peut-être claire et évidente pour toi. Mais quand il faut deviner à quoi correspondent le contrôle "Nom" et le contrôle "Prénom" et que l'on se demande si le nom du contrôle X est vraiment "Nom" et que le nom du contrôle Y est vraiment "Prénom" et que l'on se demande si "nom" cache en fait François et que si "prénom" cache en fait Julie, il n'y a pas de miracle à attendre.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Tout d'abord, le Focused permet de dire quel controle a le focus (logique) mais cela n'a rien à voir avec le controle qui a déclenché l'évènement ; on peut très bien avoir le focus sur une textbox (avec le curseur qui clignote dedansà et placer sa souris sur un bouton (et ce sera donc lui l'emetteur de l'évènement) donc on oublie le Focused.
    Ensuite plutôt que de se faire des Controls(nomControle) pas pratique du tout (tu fais comment si t'as 70 controles à tester ou le jour où tu renommes un controle ) ; dans la phrase précédente j'ai mis en gras le mot émetteur pour une bonne raison en anglais émetteur se dit "sender" et notre méthode possède un argument sender (c'est le nom généré par défaut) qui représente justement l'objet (au sens large) qui a déclenché l'évènement, autant l'utiliser.
    Oui mais pour l'utiliser correctement va falloir le convertir en quelque chose de plus utile qu'un Object, et ici Control semble le plus indiqué, pour ce faire on peut utiliser DirectCast et de là changer son BackColor (où toute autre chose de la classe Control)
    Enfin tous les types de controle n'ont pas le même BackColor par défaut (par exemple Button a SystemColors.Control et ComboBox a SystemColors.Window), donc tu peux vouloir la conserver quelque part pour pouvoir remettre la bonne lors du MouseLeave et à cette fin on va utiliser la propriété Tag qui sert un peu de "fourre-tout" pour les infos associées au controle (attention Tag renvoie un Object)

    On regroupe tout ça et ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Public Sub Controls_MouseHover(sender As Object, e As EventArgs) Handles nom.MouseHover, prenom.MouseHover
        Dim ctrl As Control = DirectCast(sender, Control) ' on converti l'émetteur en Control
        ctrl.Tag = ctrl.BackColor ' on stocke son ancien BackColor dans son Tag
        ctrl.BackColor = Color.AliceBlue ' on donne le nouveau BackColor
    End Sub
     
    Public Sub Controls_MouseLeave(sender As Object, e As EventArgs) Handles nom.MouseLeave, prenom.MouseLeave
        Dim ctrl As Control = DirectCast(sender, Control) ' on converti l'émetteur en Control
        If ctrl.Tag IsNot Nothing Then
            ' si le Tag contient bien quelque chose
            ctrl.BackColor = DirectCast(ctrl.Tag, Color) ' on remet le BackColor à son ancienne valeur (on converti car Tag renvoie un Object)
        Else
            ctrl.BackColor = SystemColors.Control ' sinon on remet une couleur par défaut (j'ai pris une couleur système assez répandue pour les contrôles)
        End If
        'ctrl.BackColor = DirectCast(If(ctrl.Tag, SystemColors.Control), Color) ' la même chose que le If/Else/End If en version raccourcie
        ctrl.Tag = Nothing ' on efface le contenu de Tag (pas forcément obligatoire)
    End Sub
    Je rejoins quand même les remarques qui ont été effectuées notamment sur les noms donnés à tes contrôles qui ne sont pas clair sur leur type
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bravo les gars, vous expliquez les choses avec tellement de tacte et de patience.....je dis chapeau....

  6. #6
    Futur Membre du Club
    Homme Profil pro
    personnel
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : personnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Tout d'abord désolé de la réponse tardive (indépendant de ma volonté...)
    Ensuite un gros merci pour votre intérêt et réponses à mon "problème".

    Pour les noms donnés à mes controls, cela me sert (dans un premier temps...?!) à mieux m'y retrouver (peut-être à tort !)
    C'est ce que je donne à la propriété NAME.
    Donc d'après vous il vaut mieux garder les noms fournis automatiquement par le logiciel (textbox1, textbox2 etc.) ??

    Je me permets d'insister sur mon coté "débutant". J'ai commencé à faire un tout petit peu de VBA sur excel2007 (y a 4 ou 5 mois) et maintenant j'essaye sur du VB.
    Je mélange encore beaucoup de chose et ne maitrise vraiment pas grand chose non plus.
    Je surfe à la recherche d'infos et tutos, mais me faut du temps pour digérer (car j'avance doucement dans l'âge) et n'ayant jamais programmé...

    Mais étant amateur (donc pas de compte à rendre) j'ai le temps.
    J’ai testé ta solution qui fonctionne, mais entre temps on m’a fournit un code qui rejoint le tiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Private Sub survol_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nom.MouseEnter, prenom.MouseEnter
            DirectCast(sender, Control).BackColor = Color.FromArgb(220, 250, 212)
        End Sub
        Private Sub nosurvol_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nom.MouseLeave, prenom.MouseLeave
            DirectCast(sender, Control).BackColor = Color.White
        End Sub
    Quand penses-tu ?
    Heureusement que le tiens est commenté, cela me permettra de mieux cerné certaines choses…
    J’avance doucement…..
    Encore merci à tous
    JLP.

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par jlp13012 Voir le message
    Bonsoir,

    Tout d'abord désolé de la réponse tardive (indépendant de ma volonté...)
    Ensuite un gros merci pour votre intérêt et réponses à mon "problème".

    Pour les noms donnés à mes controls, cela me sert (dans un premier temps...?!) à mieux m'y retrouver (peut-être à tort !)
    C'est ce que je donne à la propriété NAME.
    Pas de problème. C'est le nom que tu peux récupérer dans le:

    Donc d'après vous il vaut mieux garder les noms fournis automatiquement par le logiciel (textbox1, textbox2 etc.) ??
    Disons que pour cela, il y a une guerre de religion(s). Il y a une "religion" autour de la "notation Hongroise" inventée par Adam (je pense) Sinofski; le (ou l'ancien ?????) microsoftien et touriste de l'espace. Ils disent qu'il faut affubler les noms des contrôles d'un préfixe désignant le contrôle. Par exemple, un nom de menu devrait obligatoirement commencer par "mnu", un nom de Textbox par "txt", etc. Et il y a toute une collections "d'obligations" à suivre pour les noms de variables, de propriétés et de procédures.

    Il y en a qui ne jurent que par des normes obligatoires implantées mur à mur pour tous les employés d'une même compagnie; que ce soit la méthode hongroise, ou une méthode-maison. Ils croient que cela facilite la compréhension du code quand vient le moment de le réutiliser ou de le transmettre à quelqu'un d'autre.

    Il y en a d'autres qui croient dur comme fer qu'il faut conserver les "noms automatiques" fournis var VB.

    Moi, ma religion, c'est des noms qui disent quelque chose; peu importe le reste. Dans un petit programme avec quelques contrôles et quelques ligne qui ne quitteront jamais ma machine, j'oublie bien vite les simagrées et je change très peu souvent les noms automatiques.

    Et puis là, on n'a pas encore parlé de la religion du "code qui doit être assez évident en lui-même pour ne pas contenir de lignes de commentaires"...
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Pour ajouter à la réponse précédente (comme mon avis va dans l'ensemble dans la même direction)
    Personnellement, je dirais qu'il faut toujours renommer les contrôles (à la rigueur que les contrôles utilisés dans le code, ceux qui sont fixés juste pour le design peuvent y échapper mais pour une question de cohérence j'ai tendance à quand même les changer)

    Pour le renommage, le sens prime plus que le style de nom réellement donné ; dans l'idéal il faudrait pouvoir donner le design à quelqu'un avec les noms des contrôles sur des étiquettes à quelqu'un n'y connaissant rien et qu'il les mette aux bons endroits.

    Du coup un txtNom peut passer pour une Textbox où on met le nom (par exemple sur un design avec un Label à côté disant "Nom :" il sera sûrement trouvé) même s'il lui manque une info pour moi (le nom de quoi ? sur un design simple ça ira mais si on a formulaire bien fourni ça sera un peu plus limite) ainsi, je lui préfèrerais un SaisieNom plutôt (ou InputName car on code souvent en anglais) et d'une manière générale j'ai tendance à nommer mes contrôles en 3 parties (quand ça s'applique) : type de contrôle ; info générale ; info spécifique (ex: InputUserName) après sur des plus petits projets c'est moins important.

    Ce qu'il ne faut pas oublier c'est que le nom d'un contrôle (ou plus généralement les noms qu'on donne : variable, classe etc.) c'est surtout pour celui qui (re)lit le code que c'est important et surtout dans la mesure du possible il faut que le code soit le plus indépendant du code que possible ; et dans ce sujet on a l'exemple parfait entre une version qui reposait sur le nom des contrôles (et le jour où on change le nom faut tout modifier) contre une solution qui utilise l'émetteur de l'évènement sans savoir quel nom il a mais sans se priver de l'information (une fois casté on a accès à sa propriété Name mais même si on change le nom du contrôle le code fonctionnera toujours sans changement) j'ai vite choisi mon camp
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    personnel
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : personnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    MERCI pour votre aide et explications.
    Je bascule ce post en résolu.
    @+
    JLP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04
  2. Ma requête ne calcul pas pour tout les champs
    Par leloup84 dans le forum Requêtes
    Réponses: 10
    Dernier message: 01/03/2006, 12h59
  3. Ma requête ne calcul pas pour tout les champs
    Par leloup84 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/03/2006, 10h11
  4. [FORM] ne pas envoyer tout lors d'un submit
    Par pmartin8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/12/2005, 20h50
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo