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 savoir si le calendrier d'un DTP est déployé ? [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Comment savoir si le calendrier d'un DTP est déployé ?
    Bonjour,
    Le sujet pose la problématique sous un angle particulier.
    J'ai un DTP qui sert de paramètre d'affichage d'un graphique.
    Jusqu'ici j'utilise l'événement ValueChanged pour lancer la mise à jour de mon graphique.
    L'effet secondaire est que cet événement est activé chaque fois que je clique sur la flèche avant/arrière du calendrier du DTP une fois celui-ci ouvert.
    Idéalement, je voudrais qu'il me laisse parcourir le calendrier sans lancer la mise à jour du graphique et que cette mise à jour ne s'effectue que lorsque j'ai sélectionné la date voulue ce qui peut se résumer à la question posée en objet :
    Si j'arrive à tester le fait que le calendrier est déployé ou non, j'arriverai à mes fins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub toto ... handles monDTP.ValueChanged
    If (DTP.calendrier déployé = false) then
                 MàJ de mon graphique
    EndIf
    Mais si vous avez une autre idée, je suis preneur.

    Nota : j'ai essayé la solution qui consiste à utiliser plutôt l'event Validated mais l'effet secondaire est que cet event ne se déclenche que si 1°/ je sélectione une date et 2°/ je sors le focus du contrôle. Le 2°/ est assez pénible car pas intuitif. A choisir, je préfère rester sur ValueChanged quitte à ne pas résoudre mon pb.

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,

    avec une petite recherche : datetimepicker dropdown expand c# (oui il y a plus de résultats en C# )

    J'ai trouvé une discussion nous montrant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private _isDroppedDown As Boolean = False
     
    Private Sub MyDateTimePicker_CloseUp(sender As Object, e As EventArgs) Handles Me.CloseUp
        _isDroppedDown = False
    End Sub
     
    Private Sub MyDateTimePicker_DropDown(sender As Object, e As EventArgs) Handles Me.DropDown
        _isDroppedDown = True
    End Sub
    D'après les intervenants, il n'y aurait pas d'autres possibilités...
    Je dois avouer que ce comportement est agaçant.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Ah mais c'est parfait ça !
    Je vais essayer de ce pas.
    Encore une fois, ce qui m'agace c'est de ne pas l'avoir trouvé. J'avais bien remarqué l'event DropDown mais je désespérais de ne pas trouver son contraire. Pourtant il était bien dans la liste que j'ai dû parcourir trop vite une fois de plus.

    Merci de ton aide !

  4. #4
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Et aussi DateTimePicker.DropDown, événement ?

    EDIT: Pas lu le code de Sankasss

    Tu peux aussi faire ta classe qui hérite de DTP et y rajouter une property DTP.DroppedDown() as Boolean puis y associer le code de Sankasss pour la remplir.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Fausse joie !
    Lorsque je rajoute le code que tu m'as soufflé puis celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub toto ... handles monDTP.ValueChanged
    If  _isDroppedDown = false then
                 MàJ de mon graphique
    EndIf
    Je ne rentre jamais dans le IF THEN (même en sortant le focus du DTP)

    J'en déduis que l'event ValueChanged est déclenché AVANT l'event CloseUp

    La meilleure parade trouvée est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub toto ... handles monDTP.Validated, monDTP.CloseUp
                 MàJ de mon graphique
    EndSub
    L'event CloseUp déclenche la màj du graphique
    L'event Validated est là en secours pour le cas où l'utilisateur rentre la date avec le clavier dans le DTP.
    Je me retrouve toujours avec l'effet pénible de non màj du graphique tant que l'utilisateur n'a pas sorti le focus mais uniquement dans ce second cas qui, normalement, n'est pas le plus fréquent (enfin... ça dépend des utilisateurs !).
    Un autre inconvénient est que la procédure de màj se lance même si je ne fais qu'ouvrir le calendrier sans changer de date.
    de même, je n'ai pas vérifié, mais je suppose que la màj du graphique se lance 2 fois : une première fois sur Validated, et une seconde fois sur CloseUp

    Donc ce n'est pas encore parfait mais c'est mieux qu'avant !

    Tu noteras que plus besoin de _isDroppedDown

    Si qqun a une idée pour lever les derniers effets indésirables évoqués, je reste intéressé

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Tu peux aussi faire ta classe qui hérite de DTP et y rajouter une property DTP.DroppedDown() as Boolean puis y associer le code de Sankasss pour la remplir.
    Oui, c'est aussi expliqué dans le lien indiqué par Sankasss.

  7. #7
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Le vendredi faut me pardonner, je dis beaucoup de bêtises (comme le lundi d'ailleurs)

    Et tu ne peux pas préférer MonthCalendar qui a DateChanged et DateSelected ?

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

Discussions similaires

  1. Comment savoir si le champ d'une table est vide?
    Par CleeM dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/07/2007, 11h35
  2. Réponses: 6
    Dernier message: 01/07/2007, 18h15
  3. Réponses: 28
    Dernier message: 29/07/2006, 16h04
  4. Comment savoir si le bouton d'une fenêtre est enfoncé ?
    Par Lecerf dans le forum Composants VCL
    Réponses: 7
    Dernier message: 21/09/2005, 19h38
  5. Réponses: 19
    Dernier message: 26/01/2005, 10h41

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