2009-09-18 9 views
1

Je cherche un moyen d'utiliser deux contrôles DateTimePicker pour sélectionner une plage d'heures et de minutes en une journée. Autrement dit, pour sélectionner fondamentalement une «heure de départ» et «heure de fin».DateTimePicker: Sélection d'une plage d'heures dans un seul jour

J'ai commencé avec deux contrôles DateTimePicker avec le format personnalisé de h: mm tt. J'ai essayé d'ajouter (sur ValueChanged), une vérification qui fait que le 'temps de départ' sélectionné deviendra le 'temps de fin' et vice versa, le 'temps de fin' devenant le 'temps de départ'. merci pour votre patience!)

Cependant, cette approche ne semblait pas fonctionner - j'étais toujours en mesure de sélectionner 11h00 sur «l'heure de fin» et 13h00 sur «l'heure de départ». J'ai le sentiment que le jour actuel de l'horodatage a quelque chose à voir avec cela (par exemple, l'heure de début est le jour précédent, et donc moins).

J'ai pensé à changer pour une boîte combinée d'intervalles d'une demi-heure prédéfinis tout au long de la journée; Cependant, les minutes doivent être plus flexibles que cela ...

Des idées?

MISE À JOUR:
commentaire de Dan ci-dessous répond à ce problème ... Ce code j'ai fini avec pour référence;

Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged 

    DateTimePicker2.MinDate = Date.Today + DateTimePicker1.Value.TimeOfDay 

End Sub 

Private Sub DateTimePicker2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker2.ValueChanged 

    DateTimePicker1.MaxDate = Date.Today + DateTimePicker2.Value.TimeOfDay 

End Sub 

DateTimePicker1 étant la limite inférieure, DateTImePIcker2 étant lié la partie supérieure, à la fois en utilisant "h: mm tt" comme format datetime personnalisé.

Le stockage de ces préférences va maintenant utiliser le Value.TimeOfDay (et être stocké comme une échelle de temps), puis à la récupération, le processus de chargement suivant se produit;

DateTimePicker1.Value = Date.Today + StoredTimeLowerBound 
DateTimePicker2.Value = Date.Today + StoredTimeUpperBound 

Ceci appellera automatiquement les événements ValueChanged traités ci-dessus et restaurera les valeurs sélectionnées.

Dan, merci pour votre aide :)

+0

Il peut être utile de publier la logique ValueChanged que vous utilisez. –

+0

Sure chose, fera quand j'ai l'occasion de revenir à mon code :) –

Répondre

1

Cela fera en sorte que vos deux fois sont d'aujourd'hui:

Dim startTime As Date = Date.Today + DateTimePicker1.Value.TimeOfDay 
Dim endTime As Date = Date.Today + DateTimePicker2.Value.TimeOfDay 

Ensuite, vous pouvez écrire If endTime < startTime Then endTime = startTime ou tout ce que vous voulez.

Enfin, il suffit de mettre vos modifiés valeurs de date de retour dans les contrôles DateTimePicker:

DateTimePicker1.Value = startTime 
DateTimePicker2.Value = endTime 

EDIT: Pour une plage d'heures que vous voulez un objet TimeSpan, qui est automatiquement le résultat de l'addition/soustraction DateTime objets:

Dim range As TimeSpan = endTime - startTime 
Dim numHours As Double = range.TotalHours 
+0

Merci pour votre réponse. Je ne m'inquiète pas du jour d'où viennent les valeurs, c'était juste une idée de pourquoi ce que je voulais ne fonctionnait pas vraiment. Je suppose que je pourrais reformuler que j'ai besoin de sélectionner une plage d'heures en utilisant l'heure de début et de fin (comme h: MM tt) dans DateTimePickers avec logique de validation. –

+0

@Shadow: Voir ma modification. Est-ce ce que vous voulez savoir? Pas même proche? –

+0

J'ai de nouveau eu accès à mon code et testé les premières déclarations que vous avez fournies - elles ont fonctionné comme un charme! Le Value.TimeOfDay a vraiment aidé les choses :). –

Questions connexes