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 :

Paramétrer un DateTimePicker [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 68
    Par défaut Paramétrer un DateTimePicker
    Bonjour,
    J'ai un problème: Je veux paramétrer la MaxDate et la MinDate d'un Datetimepicker on fonction des données récupérées d'un Combobox & Textbox.
    J'explique:

    J'ai: - un DateTimePicker1, - un Combobox1, - un Textbox1

    - le Combobox1 contient la liste de tout les mois du janvier au décembre(en français).
    - le Textbox1 est dédié pour la saisie d'une année.

    Voici donc mon objectif:

    1 - Choisir un mois dans le Combobox1 (Janvier par exemple)
    2 - Saisir une année dans le Textbox1 (2012 par exemple)
    3 - Appuyer sur un bouton "BtnValider"
    4 - Le DateTimePicker Aura comme MinDate le 1 Janvier 2012 et comme MaxDate le 31 Janvier 2012
    J'ai essayé ce truc pour la MinDate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTimePicker1.MinDate = MonthName(ComboBox1.Text)
    mais cela ne marche pas!!
    En attente de tout type de proposition et merci beaucoup d'avance..

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Monthname te renvoie le nom du mois en fonction du chiffre (et non l'inverse).

    MinDate et MaxDate on besoin d'une variable de type date et non pas un string avec un nom de mois ou un int de 1 à 12.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTimePicker1.MinDate = New Date(intYear, intMonth, intDay)
    Voila maintenant que je recadre un poil ta demande, je te laisse retourner à tes recherches. C'est comme ça que ca rentre...

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 68
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTimePicker1.MinDate = New Date(intYear, intMonth, intDay)
    Merci beaucoup Sinople c'était très utile .. (y)

  4. #4
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    Bonjour,

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim minDate as Date = DateSerial(CInt(Textbox1.Text), Combobox1.SelectedIndex + 1, 1)
    Dim maxDate As Date = DateSerial(minDate.Year, minDate.Month, minDate.DaysInMonth)

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 68
    Par défaut
    y'a t-il une méthode pour réinitialiser le datetimepicker?
    car si par exemple:
    - je mets la mindate du datetimepicker au 1 Janvier 2012 et la maxdate au 31 Janvier 2012 => Si j'essaie de modifier le datetimepicker afin que la mindate soit le 1 mars 2012 et la maxdtate au 31 mars 2012 il ne m'est pas possible de raison que le maxdate était déja fixé sur le 31 janvier 2012 et donc la nouvelle mindate ne peut pas être le 1 Mars 2012.
    alors y'at-il une possibilité de réinitialiser le datetimepicker de telle sorte qu'il peut prendre chaque fois une valeur qui lui fixe sur un mois désiré?

  6. #6
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    effectue un test entre les anciennes valeurs et les nouvelles pour savoir dans quel sens effectuer les modifications... ?

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Il suffit d'utiliser les propriétés shared MaximumDateTime et MinimumDateTime de la classe DateTimePicker, représentant les 2 bornes imposées par le système (en aucun cas possible de déterminer une date plus grande ou plus petite que ces valeurs) afin d'élargir au maximum la plage de travail avant de la réduire sur ton nouveau mois.

  8. #8
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    A voir en terme d'optimisation si 4 affectations de dates (max initial, min initial, nouveau max et nouveau min) et plus rapide qu'un if et deux affectations de dates...

    Je n'en sais rien...

    Même si le gain doit pas être flagrant sur ce genre de traitement occasionel, ça reste une question à se poser je pense...

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Au niveau du traitement je ne sais pas.

    Au niveau de l'implémentation du code, je pense pouvoir dire sans trop de risque que ma solution est plus rapide...

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 68
    Par défaut
    Citation Envoyé par sinople Voir le message
    Il suffit d'utiliser les propriétés shared MaximumDateTime et MinimumDateTime de la classe DateTimePicker, représentant les 2 bornes imposées par le système (en aucun cas possible de déterminer une date plus grande ou plus petite que ces valeurs) afin d'élargir au maximum la plage de travail avant de la réduire sur ton nouveau mois.
    Stp, tu peux me donner un exemple comment utiliser cette public shared property? je n'arrive pas a trouver la syntaxe correcte pour la déclarer et la lier au datetimepicker!!

  11. #11
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Pour accéder au propriété shared d'une classe il faut mettre le nom de la classe au lieu du nom de l'instance.

    x As y = New y()

    Il faut mettre le y et non le x.

    Encore que le x fonctionne aussi selon la version de VB et le paramètrage de l'IDE que tu utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTimePicker1.MaxDate = DateTimePicker.MaximumDateTime
    DateTimePicker1.MinDate = DateTimePicker.MinimumDateTime

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 68
    Par défaut
    ça marche!! Merci bien .. ^^

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,
    Citation Envoyé par gnusti Voir le message
    A voir en terme d'optimisation si 4 affectations de dates (max initial, min initial, nouveau max et nouveau min) et plus rapide qu'un if et deux affectations de dates...

    Je n'en sais rien...

    Même si le gain doit pas être flagrant sur ce genre de traitement occasionel, ça reste une question à se poser je pense...
    3 affectations suffisent.
    max initial (passer MaxDate à MaximumDateTime pour être plus précis et ne pas confondre avec une valeur affectée avant)
    nouveau min (qui sera forcement plus petit que MaximumDateTime)
    nouveau max

    Fait le test avec une boucle de 20000 fois, tu auras ta réponse.

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  14. #14
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    Bonjour,

    Je viens de tester et le If semble plus rapide (la différence est même enorme chez moi )

    Un UserForm, un DateTimePicker et un Button :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim starTTime As Long
            Dim elapsedTime As Long
     
            Dim minDate As Date = DateSerial(2012, 9, 1)
            Dim maxDate As Date = DateSerial(2012, 9, 30)
     
            '''''''''''''''''''''
            '''' SOLUTION 1
            '''''''''''''''''''''
            starTTime = Now.Ticks
            Dim realyMaxDate As Date = DateTimePicker.MaximumDateTime
            For i = 1 To 100000
                DateTimePicker1.MaxDate = realyMaxDate
                DateTimePicker1.MinDate = minDate
                DateTimePicker1.MaxDate = maxDate
            Next
            elapsedTime = Now.Ticks - starTTime
            MsgBox(elapsedTime)
     
            '''''''''''''''''''''
            '''' SOLUTION 2
            '''''''''''''''''''''
            starTTime = Now.Ticks
            For i As Integer = 1 To 100000
                If DateTimePicker1.MinDate > minDate Then
                    DateTimePicker1.MinDate = minDate
                    DateTimePicker1.MaxDate = maxDate
                Else
                    DateTimePicker1.MaxDate = maxDate
                    DateTimePicker1.MinDate = minDate
                End If
            Next
     
            elapsedTime = Now.Ticks - starTTime
            MsgBox(elapsedTime)
     
        End Sub
    Je pense que ça doit venir de cette date enorme à gérer : 31/12/9998 quand même...

  15. #15
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    3 affectations suffisent.
    max initial (passer MaxDate à MaximumDateTime pour être plus précis et ne pas confondre avec une valeur affectée avant)
    nouveau min (qui sera forcement plus petit que MaximumDateTime)
    nouveau max
    C'est pas faut (voir même tout juste...).

    Concernant le teste de performance, je dirais que d'essayer de boucler 10'000 fois pour vérifier s'il y a une différence significative est complétement hors-propos.

    Sauf si tu as prévu d'updater 10'000 datetimepicker sur ton application en même temps. Ce genre de comparatif a un sens dans des algo qui tourne en boucle (genre un tri, chargement de donnée, conversion / traitement de donnée, etc).

    Effectivement une différence de 1 ms secondes lors d'un click * 10'000 ça fait une différence 10 secondes à la fin. Mais l'utilisateur va appuyer sur ce bouton UNE fois toutes les 15-30 secondes, donc je doute que la millisecondes * 1 soit vraiement significative (donne une impression de blocage de l'interface).

    Mais néanmoins je suis près à changer d'avis après publication des résultats par itération.

    P.S. Merci d'avoir mis le code du test, on voit clairement les 2 solutions en action. J'espère juste que personne ne va faire un copier-coller tel quel dans son projet

  16. #16
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    C'est ce que je disais dans mon post prédédant :

    Même si le gain doit pas être flagrant sur ce genre de traitement occasionel, ça reste une question à se poser je pense...
    Il faut toujours essayer d'optimiser, c'est un reflexe à prendre...

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

Discussions similaires

  1. [WP7][ToolKit] Paramétrer un DateTimePicker
    Par DotNET74 dans le forum Windows Phone
    Réponses: 8
    Dernier message: 28/04/2011, 12h56
  2. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 20h47
  3. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 12h24
  4. DateTimePicker
    Par benj63 dans le forum C++Builder
    Réponses: 5
    Dernier message: 08/07/2002, 13h05

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