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 :

Comment écrire un texte dans un rectangle en survolant une case


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut Comment écrire un texte dans un rectangle en survolant une case
    Bonjour, je débute dans le language vb.net et je cherche un code que je n' arrive pas à trouver sur le net.

    J' aimerais faire un mousehover et non un tooltip.

    Exemple :

    If mousehover est sur checkbox1 then
    Show.texte "blabla" dans le rectangle

    Merci d' avance.

  2. #2
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    Placez le code à exécuter (un texte qui s'affiche par exemple) dans l'évènement "MouseMove" de votre contrôle checkbox.

    Utilisez l'évènement "MouseHover" si le texte ne doit s'afficher qu'au bout d'un certain temps.

    Cordialement,
    :FF:

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par franticfranz Voir le message
    Bonjour,

    Placez le code à exécuter (un texte qui s'affiche par exemple) dans l'évènement "MouseMove" de votre contrôle checkbox.

    Utilisez l'évènement "MouseHover" si le texte ne doit s'afficher qu'au bout d'un certain temps.

    Cordialement,
    :FF:
    Merci de ta réponse franticfranz, mais le soucis c'est que je n' ai pas vraiment compris de ce que tu voulais dire. Je connais pas encore tout le jargon pour visual basic.

    Comment accéder à l' évènement "MouseMove" du controle de la checkbox ?
    Comment utiliser l' évènement "MouseHover" ?
    Quel sera le code pour tous ?

    Désolé si je pose toutes ces questions.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116

  5. #5
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Citation Envoyé par FReShL4m3r Voir le message
    Comment accéder à l 'événement "MouseMove" du controle de la checkbox ?
    Comment utiliser l' évènement "MouseHover" ?
    Quel sera le code pour tous ?
    Si ce n'est déjà fait, je vous conseille vivement de faire
    une première application simple en suivant un (excellent) tutoriel.

    La notion d'évènement vous sera beaucoup plus familière alors.

    Le petit bouton en forme d'éclair jaune , dans la boîte de propriétés du checkbox, vous livre la liste des évènements exploitables. Un double-clic dans la boîte vide à droite de l'évènement concerné créera automatiquement le point d'accès à votre code. Il ne vous reste plus qu'à y placer votre oeuvre.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Merci franticfranz, j' ai compris comment fonctionne les événemnts

    Pour le mousemove, c' est bon. Le texte s' affiche bien la où je veux mais me reste encore l' événement mousehover pour faire disparaitre le texte.

    Pour les toolitips, j' avais vu sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' modifions les délais du ToolTip.
    toolTip1.AutoPopDelay = 6000  'nombre de millisecondes d'affichage
    toolTip1.InitialDelay = 2000 'nombre de millisecondes avant l'affichage
    toolTip1.ReshowDelay = 500

  7. #7
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    Je n'ai pas bien compris quelle est la question : je présume que c'est "comment faire disparaître mon texte ?"

    Si c'est ça : Une partie de la réflexion en VB.NET consiste à savoir quel évènement provoque une action donnée.

    Donc pour vous proposer une aide, il faut que vous nous disiez quand votre texte doit disparaître :

    - Au bout d'un certain temps ? (temporisation => Timer)
    - Lorsque la souris quitte le checkbox ? (évènement MouseLeave)
    - ...?

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Merci encore franticfranz de votre réponse.

    Effectivement l' évènement MouseLeave est plus intéressante que MouseHover, donc j' ai adopté pour la 1ère.

    Ceux qui me donne sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub CheckBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles CheckBox1.MouseMove
            Label6.Text = "Ce service met en spoule les travaux d’impression et gère l’interaction avec l’imprimante. Si vous arrêtez ce service, vous ne pourrez plus imprimer ni voir vos imprimantes"
        End Sub
     
        Private Sub CheckBox1_MouseLeave(sender As Object, e As EventArgs) Handles CheckBox1.MouseLeave
            Label6.Text = "Survolez les tweaks pour avoir plus d'explications"
        End Sub
    Je suis entrain de me faire mon propre tweaker pour Windows 8, je m' amuse à transformer touts les tweaks en fichiers .reg et ensuite je les importe dans mon programme.
    Par contre, suis-je obligé de le marqué en deux fois ? car j'ai énormément beaucoup de tweaks.

    Mais c' est vrai qu' un simple copier/coller est rapide

  9. #9
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    Première remarque : pour ce qu vous faites, il vaut mieux utiliser l'évènement MouseEnter à la place de MouseMove.

    Citation Envoyé par FReShL4m3r Voir le message
    Par contre, suis-je obligé de le marqué en deux fois ? car j'ai énormément beaucoup de tweaks.
    Encore une fois je ne suis pas sûr de bien saisir votre question... Si c'est : "Est-ce que vous êtes obligé d'écrire deux bouts de code pour chaque checkbox ?", la réponse est non.

    Tout d'abord, pour l'évènement MouseLeave, vous pouvez associer votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox1_MouseLeave(sender As Object, e As EventArgs) Handles CheckBox1.MouseLeave
    Label6.Text = "Survolez les tweaks pour avoir plus d'explications"
    End Sub
    à chaque checkbox (plusieurs checkboxes peuvent avoir le même évènement MouseLeave sans problème).

    Pour chaque Checkbox, vous pouvez compléter la propriété tag. Placez-y le texte à afficher dans le label lorsque la souris survole le checkbox.



    Ensuite, écrivez le code ci dessous pour l'évènement MouseEnter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub CheckBox1_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseEnter
            Dim cb As CheckBox
            cb = DirectCast(sender, CheckBox)
            Label1.Text = cb.Tag
        End Sub
    Il vous suffit d'associer cette procédure à tous vos checkboxes, dans l'évènement "MouseEnter". Inutile alors de réécrire à chaque fois une procédure.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Merci pour ces informations utiles.

    Est-ce qu' il a une grosse différence entre MouseMove et MouseEnter ?
    Sa jouera t-il sur la stabilité du programme ?

    Car j' ai essayé avec votre méthode mais je ne vois pas la différence avec celle mentionnée plus haut.
    Si j' ai bien compris je dois créer 2 évènements :

    MouseEnter ou MouseMove pour afficher le texte ailleurs quand je survole un checkbox
    MouseLeave pour faire disparaitre le texte

    à chaque checkbox (plusieurs checkboxes peuvent avoir le même évènement MouseLeave sans problème).
    Le soucis, il faut bien 2 évènements pour chaque checkbox car si je vais sur un autre checkbox, je veux toujours faire afficher le texte de la MouseLeave quand je ne survole plus celui-ci. ( comme mon exemple)
    Comment peut-on passer outre pour éviter de l' écrire à chaque checkbox ?


    Pour la question, désolé de ne pas être plus précis. Néanmoins vous l' avez bien répondu.

  11. #11
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonsoir,

    MouseMove se produit à chaque fois que le pointeur de la souris se déplace sur la zone du contrôle (visuellement pour chaque "pixel" de la zone).

    MouseEnter ne se produit qu'une fois, que lorsque le pointeur de la souris "Entre" sur la zone du contrôle.

    Pour votre problème, il vaut mieux utiliser l'évènement MouseEnter. Ça consommera moins de ressources.

    Pour la deuxième partie de votre problème, à savoir la réinitialisation du texte du label, oui il faut écrire une deuxième procédure qui sera appelée sur l'évènement MouseLeave de vos checkbox.

    Suivant le nombre de checkbox, il peut être intéressant de passer par une boucle pour ce faire...

    Bon dev.

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Merci Rainui,

    Je vais remédier à cela, étant donné que c' est mon 1er programme, je préfère qu' il soit stable.

    Suivant le nombre de checkbox, il peut être intéressant de passer par une boucle pour ce faire...
    Oui j' ai beaucoup de checkbox dans chaque formulaire, si je pouvais passer par une sorte de boucle sa serait génial.


    Sinon j' avais une question a part sur un exemple de franticfranz.

    il avait mentionné cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Private Sub CheckBox1_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseEnter
    et de mon côté j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Private Sub CheckBox1_MouseEnter(sender As Object, e As EventArgs) Handles CheckBox1.MouseEnter
    Qu' elle est la différence ?

  13. #13
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonjour,

    Il n'y a pas de différence entre les deux codes que vous avez cité.

    Il y a deux manières de passer des paramètres à une procédure ou à une fonction :

    ByVal veut dire que les paramètres de la procédure/fonction sont passé par leur valeur.
    ByRef veut dire que les paramètres e la procédure/fonction sont passé par leur référence. (ByRef est une référence vers un emplacement mémoire qui peut changer dans le temps donc attention à son utilisation)

    System.Object/System.EventArg est identique à :

    Un référencement dans le projet de System
    Un import de la classe System en début de classe

    L'utilisation du référencement permet d'économiser son clavier et produire un code plus lisible.
    Ca permet également d'importer que ce dont on a besoin et encore une fois de ne pas consommer des ressources pour rien.

    Par exemple dans System.Data, je n'ai pas forcément besoin de tout. Si je n'ai besoin que de SqlClient dans une seule classe, j'importerais System.Data.SqlClient dans cette classe. Si j'en ai besoin dans plusieurs classes, je fait un référencement dans le projet.
    Dans mon code, je n'aurais plus qu'à utiliser les objets de cette classe sans devoir rappeller systématiquement System.Data.SqlClient.Objet.

    A la création d'un projet, VS met systématiquement les référencements principaux, c'est pourquoi votre code diffère un peu de celui proposé.

  14. #14
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Citation Envoyé par FReShL4m3r Voir le message
    Le soucis, il faut bien 2 évènements pour chaque checkbox car si je vais sur un autre checkbox, je veux toujours faire afficher le texte de la MouseLeave quand je ne survole plus celui-ci. ( comme mon exemple)
    Non. Avec la solution que je vous ai proposé il n'y aura en tout et pour tout qu'une procédure MouseLeave et une procédure MouseEnter quel que soit le nombre de checkboxes. Pas besoin de boucle non plus, donc.

    EDIT : Je vous ai ajouté un exemple en pièce jointe dans lequel vous verrez la facilité d'emploi de ce système... code très court, aucune boucle.
    Fichiers attachés Fichiers attachés

  15. #15
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonsoir,

    Dans votre exemple, vous avez ce que j'appelle peu de checkbox
    Ce qui oblige d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Handles CheckBox1.MouseLeave, CheckBox5.MouseLeave, CheckBox4.MouseLeave, CheckBox3.MouseLeave, CheckBox2.MouseLeave
    L'idée de la boucle c'est dans le cas ou l'on a beaucoup de checkbox

    Style :
    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
     
    Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Each ctrl As Control In Me.Controls
            If TypeOf (ctrl) Is CheckBox = True Then
                AddHandler ctrl.MouseEnter, AddressOf AfficherInfo
                AddHandler ctrl.MouseLeave, AddressOf ResetInfo
            End If
        Next
    End Sub
     
    Private Sub AfficherInfo(sender As Object, e As EventArgs)
        Label1.Text = DirectCast(sender, CheckBox).Tag
    End Sub
     
    Private Sub ResetInfo(sender As Object, e As EventArgs)
        Label1.Text = "Bla bla bla"
    End Sub
    Bien évidement, ce code est valide que dans le cas ou toutes les checkbox doivent avoir le même comportement...

  16. #16
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Oui il y en a peu, et votre solution est tout à fait élégante. J'avais mal interprété la proposition à propos de la boucle.

    Dans la mesure où FReShL4m3r a "énormément beaucoup" de checkboxes, c'est sans doute une solution incontournable.

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup Rainui et franticfranz, j' apprécie votre aide.

    Je vais tester sa aujourd'hui et je vous dirai si cela est impécable pour ma situation.

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Testé aujourd'hui, vos deux méthodes fonctionnent parfaitement mais je rencontre un problème avec celle de Rainui car dans certaines formulaires, j' utilise un checkbox pour tous les sélectionner et le message ne s' affiche que sur lui. Quand je teste sur un nouveau projet, c' est bon, je dois avoir une petite erreur de code.

    Sinon ce n 'est pas vraiment un soucis, j' ai utilisé votre méthode franticfranz et je n' ai pas mentionné celle qui sélectionne tous et cela fonctionne parfaitement.

    Je vous remercie encore à vous deux, vous m' avez beaucoup aidé et appris les connaissances des évènements.

    J' ai encore une dernière question, le fait de mettre 40 MouseEnter et MouseLeave dans la même ligne en utilisant la technique de franticfranz, est-ce que cela à un côté néfaste envers la stabilité du programme ?
    Cela va t-il utiliser plus de ressources ?

  19. #19
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonjour,

    Pour répondre à votre dernière question, à savoir :
    J' ai encore une dernière question, le fait de mettre 40 MouseEnter et MouseLeave dans la même ligne en utilisant la technique de franticfranz, est-ce que cela à un côté néfaste envers la stabilité du programme ?
    Cela va t-il utiliser plus de ressources ?
    Non, il n'y a pas de problème particulier si ce n'est le risque d'en oublier un dans la liste
    Non, ça ne consomme pas plus de ressources.

    Et oui, c'est illisible et peu maintenable

    C'est l'avantage de la solution que je vous ai apporté. Dans le cas ou un des checkBox ne doit pas adopter la même logique, vous pouvez placer les "40" autres dans un panel ou n'importe quel conteneur. Dans ce cas au lieu de faire la boucle sur les contrôles du formulaire, on fait la boucle sur le conteneur des 40 checkbox.
    "Diviser pour mieux gérer et pour s'y retrouver"

    Bon dev.

    EDIT: Le problème que vous rencontrez vient de la deuxième partie de ma réponse Vos "40" checkbox ne doivent pas être directement sur la form.
    La solution que je vous ai donné ne parcourt que les contrôles enfants de premier niveau du formulaire (pas les contrôles des contrôles /.../ des contrôles du formulaire)

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/07/2010, 18h13
  2. Réponses: 11
    Dernier message: 16/02/2008, 13h09
  3. Comment écrire du texte dans un fichier existant?
    Par Immothep dans le forum Linux
    Réponses: 1
    Dernier message: 20/06/2007, 15h00
  4. Réponses: 7
    Dernier message: 17/03/2006, 13h26
  5. Comment centrer un Texte dans un rectangle ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 21h56

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