Question

Faits:

  • J'ai un TabControl avec 2 onglets. Chaque onglet a 2 DateTimePicker.
  • Dans l'événement Load, je définis la valeur de tous les DTP.
  • ShowCheckBoxes est défini sur true pour ANDTPD et défini sur false pour Checked.
  • Lorsque j'exécute le programme, les DTP du premier onglet sont OK, mais lorsque je vérifie les DTP du deuxième onglet, ils affichent l'heure actuelle, et non l'heure que j'ai définie pour l'événement de chargement.

Pourquoi cela se produit-il? Comment puis-je l'éviter?

Était-ce utile?

La solution 3

Ma solution de contournement moche à ce problème consiste à définir comme actif l'onglet dans lequel se trouvent les DTP avant de changer ses valeurs, quelque chose comme ceci:

DateTime dat1 = DateTime.Today;
DateTime dat2 = dat1.AddDays(1).AddSeconds(-1);

dtpCreatedStart.Value = dat1;
dtpCreatedEnd.Value = dat2;
tbc.SelectTab(1);
dtpModifiedStart.Value = dat1;
dtpModifiedEnd.Value = dat2;
tbc.SelectTab(0);

Autres conseils

J'ai découvert le problème ici.

La propriété Value ne définit une nouvelle valeur que si le contrôle DateTimePicker est visible. Sinon, la commande est ignorée.

Cas de test:

Ne fonctionne pas:

 this.picker = new DateTimePicker
        {
            Checked = false,
            Font = new System.Drawing.Font("Verdana", 9.75F),
            Format = System.Windows.Forms.DateTimePickerFormat.Time,
            Location = new System.Drawing.Point(5, 5),
            Name = "picker",
            ShowUpDown = true,
            Size = new System.Drawing.Size(120, 23),
            Visible = false
        };
        this.Controls.Add(this.picker);
        this.picker.Value = this.picker.Value.Date.AddHours(1);
        this.picker.Visible = true;

Fonctionne:

 this.picker = new DateTimePicker
        {
            Checked = false,
            Font = new System.Drawing.Font("Verdana", 9.75F),
            Format = System.Windows.Forms.DateTimePickerFormat.Time,
            Location = new System.Drawing.Point(5, 5),
            Name = "picker",
            ShowUpDown = true,
            Size = new System.Drawing.Size(120, 23),
            Visible = false
        };
        this.Controls.Add(this.picker);
        this.picker.Visible = true;
        this.picker.Value = this.picker.Value.Date.AddHours(1);

Ne semble pas avoir rien à voir avec l'ajout programmé du sélecteur, semble-t-il.

Cela concerne la propriété Checked du datetimepicker. Il est généralement défini sur false. Au moins, c’était le problème pour moi.

Après avoir défini le paramètre datetimepicker.checked sur true, la valeur a été extraite des paramètres.

DateTimePicker a quelques problèmes avec le stockage et la récupération de sa valeur. J'ai eu du mal à lier la valeur à un DateTime non nullable - j'ai eu NullReferenceExeptions de temps en temps. Aucune idée pourquoi ou quand. Parfois, cela venait de se produire et bloquait l'application.

Je viens de rencontrer le même problème avec deux DateTimePickers. J'ai pu faire en sorte que les deux affichent la valeur correcte en les générant de manière dynamique et en les ajoutant au formulaire.

Si vous ne pouvez pas le faire fonctionner, vous pouvez toujours essayer d’utiliser un sélecteur différent. Le widget Calendrier Datepicker / Timepicker AJAX Any + Time (TM) tire sa valeur du champ associé, Par conséquent, si vous initialisez le champ avec une valeur ou si vous modifiez un champ pour lui attribuer une valeur (comme dans onload), c'est ce que vous obtiendrez lorsque le sélecteur sera affiché. Si vous rencontrez des problèmes, envoyez simplement un message via la page de contact, qui le traitera dès que possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top