6
votes

Comment contrôler l'intervalle de temps dans un DateTimePicker

J'ai un DateTimePicker strong> contrôle sur un formulaire spécifié comme:

dtpEntry.Format = DateTimePickerFormat.Custom;
dtpEntry.CustomFormat = "dd/MM/yyyy hh:mm:ss";
dtpEntry.ShowUpDown = true;


0 commentaires

6 Réponses :


1
votes

Le problème est que la commande UP / DOWN augmente automatiquement ou diminue la partie actuellement mise en surbrillance du sélecteur de date / heure (I.E. Année / mois / jour / heure / etc.).

Vous êtes probablement mieux pour ajouter votre propre commande haut / bas (peut-être une très petite vscrollbar) immédiatement adjacente au sélecteur de date / heure et de le câblage jusqu'à l'incrémentation / décrémentation d'intervalles de cinq minutes à partir de la valeur du sélecteur de date / heure. < / p>


0 commentaires

10
votes

Il est possible en surveillant l'événement de valeurChageed et remplacer la valeur. Ce formulaire d'échantillon a bien fonctionné:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        dateTimePicker1.CustomFormat = "dd/MM/yyyy hh:mm";
        dateTimePicker1.Format = DateTimePickerFormat.Custom;
        dateTimePicker1.ShowUpDown = true;
        dateTimePicker1.Value = DateTime.Now.Date.AddHours(DateTime.Now.Hour);
        mPrevDate = dateTimePicker1.Value;
        dateTimePicker1.ValueChanged += new EventHandler(dateTimePicker1_ValueChanged);
    }
    private DateTime mPrevDate;
    private bool mBusy;

    private void dateTimePicker1_ValueChanged(object sender, EventArgs e) {
        if (!mBusy) {
            mBusy = true;
            DateTime dt = dateTimePicker1.Value;
            if ((dt.Minute * 60 + dt.Second) % 300 != 0) {
                TimeSpan diff = dt - mPrevDate;
                if (diff.Ticks < 0) dateTimePicker1.Value = mPrevDate.AddMinutes(-5);
                else dateTimePicker1.Value = mPrevDate.AddMinutes(5);
            }
            mBusy = false;
        }
        mPrevDate = dateTimePicker1.Value;
    }
}


1 commentaires

Cela a fonctionné parfaitement, tout ce que je devais faire était d'ajuster la valeur dans addminutes () pour mon cas et c'était littéralement brancher et jouer.



0
votes

Je sais que c'est un ancien article, mais j'ai créé une meilleure solution à ce problème en fonction de la réponse ci-dessus.

dans la classe xxx

dans le constructeur xxx

xxx < / pré>


1 commentaires

J'aime ta réponse sixothree, mais j'ai essayé de l'utiliser, et ça marche très bien, des œuvres comme un charme. Mais si vous y descendez une fois qu'il devient "00", cela commence à faire les heures de monter. J'essaie de trouver pourquoi comme nous parlons. Une fois que ce bogue unique est corrigé, je suis sûr que cela sera une fonctionnalité géniale.



0
votes

Vous pouvez ajouter ce code xxx

avant xxx


0 commentaires

7
votes

J'ai changé un peu la réponse de Sixothree, pour éliminer le bogue trouvé par Necromporph. Il devrait être ok comme ceci:

dans la classe xxx

dans le constructeur xxx

l'événement xxx


0 commentaires

1
votes

ou simplement essayer ceci: xxx


0 commentaires