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

Dotnet Discussion :

Soucis avec panel, ses controls et les événements


Sujet :

Dotnet

  1. #1
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut Soucis avec panel, ses controls et les événements
    Bonjour tout le monde,

    Je travaille actuellement sur un projet qu'on va résumer comme une base de données de photos.
    Bien sûr, j'affiche des vignettes des photos insérées ou à insérer dans la base et pour ce faire, je me suis créé un petit contrôle perso à base d'une PictureBox et de deux panels pour donner un petit effet d'ombre. En plus, je lui ai greffé quelques événements dont un que j'ai habilement (si,si) nommé "Survol".

    Comme son nom l'indique, une fois que la souris passe sur la vignette, l'événement se déclenche, l'intérêt pour moi étant de récupérer cet événement pour afficher des infos concernant la photo.

    Bref, pour afficher ces vignettes, j'ai choisi de les placer dans un panel avec autoscroll.

    Tout se passe à merveille ou presque.

    En effet, lorsque je passe ma souris sur une vignette, l'événement se déclenche bien et je récupère les précieuses infos dont j'avais besoin. Seulement, de son côté, le panel "parent" des vignettes replace automatiquement son autoscrollposition à 0, ce qui rend la chose tout simplement inutilisable. Je peux donc faire défiler une dizaine de vignettes mais lorsque je place la souris dessus, hop, aussitôt, l'autoscrollposition revient à 0 et je perds donc la vignette sélectionnée...

    Si vous aviez ne serait-ce qu'un début d'idée pour contrer ce problème, j'en serai bien heureux.

    D'avance merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par Arno_94 Voir le message
    Si vous aviez ne serait-ce qu'un début d'idée pour contrer ce problème, j'en serai bien heureux.
    Sans voir le code, ce sera difficile...

    pourquoi créer un évènement Survol ? tu ne pouvais pas t'en sortir avec les évènements MouseMove, MouseEnter, MouseLeave, ou MouseHover ?

  3. #3
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Hello,

    L'événement "survol" que j'ai créé est juste un raccourci. Mon UC "Vignette" se compose d'un panel de 5 pix plus grand que le picture box pour donner un effet de diapo et d'un second panel décalé avec une couleur Alpha pour donner un effet d'ombre. L'événement survol de la vignette n'est autre qu'un raccourci de vers l'événement MouseEnter de la pictureBox, c'était juste question de rendre la chose plus facile à manipuler mais je pourrai très bien passer directement par le mouseEnter de la Picbox.

    Je génère des vignettes à la volée et les place automatiquement dans un panel. Afin de les placer correctement (décalage de 10 pix entre chaque + centrage), j'ai récupéré l'événement ControlAdded du panel pour qu'il repère la position de la dernière vignette afin de définir la position de la prochaine.

    Tout fonctionne très bien et lorsque je mets plus de vignette que peut n'en contenir le panel, une scrollbar apparaît. Si je scrolle vers les vignettes invisibles et que je passe la souris sur l'une d'entre elles, hop, le panel remet son autoscrollposition à 0. De mon côté, dans le code, jamais je ne touche à l'autoscrollposition, il y a donc un truc qui m'échappe genre un événement qui doit se déclencher lorsque je survole mes vignettes et qui fait que le panel réinitialise sa position mais je n'ai pas encore trouvé de quoi il peut s'agir. J'en suis encore au stade de débutant et il y a quelques logiques de fonctionnement qui m'échappent encore.

    Si tu as une idée...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par Arno_94 Voir le message
    Si tu as une idée...
    Toujours pas, puisque tu n'as toujours pas montré ton code... on peut pas deviner ! Fais voir au moins le code de l'évènement Survol.
    Tu ne modifierais pas la taille de tes UserControl par hasard ?

  5. #5
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Re,

    Sans vouloir paraître arrogant, j'étais convaincu que le code n'y était pour rien car il n'y avait que des choses simples et je n'avais pas tord.

    En effet, j'ai trouvé ça :

    http://support.microsoft.com/kb/829417/fr

    Apparemment, c'est un problème courant lorsqu'on met des contrôles utilisateurs dans un panel.

    J'avais pensé à récupérer l'autoscrollposition en début de méthode déléguée de l'événement "survol" mais je n'avais pas remarqué qu'il renvoyait des valeurs négatives. En récupérant cette valeur en début de méthode et en appliquant la valeur absolue des deux points sur l'autoscrollposition en fin de méthode, le problème disparaît.

    Si tu n'as jamais rencontré ce souci, c'est clair que tu ne pouvais pas m'aider, c'est un cas spécial apparemment, mais merci d'avoir essayé.

    Bonne journée (tss, enfermé au sous sol de ma boîte à me prendre la tête avec ce panel alors qu'il fait un temps magnifique dehors, les boules...) et sûrement à bientôt pour de nouvelles énigmes.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    ben je peux comprendre que quand on Clear les contrôles enfants, la position du scroll soit perdue, mais là ce n'était pas ton cas, si ?

  7. #7
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Non, non, il n'y avait pas de Clear ni aucune retouche du Layout du panel dans le code. D'après ce qu'indique la page de support c'est parce que le panel contient des contrôles utilisateurs que ça réagit de cette manière. Il doit certainement se forcer à se redessiner dès que j'accède à une méthode de l'UC et, toujours comme l'indique la page de support, comme il perd la position de l'autoscroll à ce moment là, boom, il la remet à 0.

    Enfin, le problème est réglé et ça m'enlève une belle épine du pied.

    Cela dit, il me reste un souci lié au layout MDI. J'ai posé la question en début de semaine mais aucune réponse pour le moment.

    http://www.developpez.net/forums/sho...d.php?t=592781

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

Discussions similaires

  1. [Débutant] Petit soucis avec les événements d'un Datagrid
    Par TheRafal dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 22/10/2013, 21h24
  2. Des soucis avec mon application Excel sur les contacts
    Par diddle dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/11/2007, 19h50
  3. Problème avec les évènement de mes controle
    Par napegadie dans le forum VB.NET
    Réponses: 5
    Dernier message: 17/08/2007, 12h41
  4. Réponses: 7
    Dernier message: 05/10/2004, 13h44
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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