Domanda

I fatti:

  • Ho un TabControl con 2 schede, ogni scheda ha 2 DateTimePicker.
  • Nell'evento Load, ho impostato il valore di tutti i DTP.
  • Tutti i DTP hanno ShowCheckBoxes impostato su true E Checked impostato su false.
  • Quando eseguo il programma, i DTP nella prima scheda sono OK, ma quando controllo i DTP nella seconda scheda, mostrano l'ora corrente, non l'ora che ho impostato sull'evento di caricamento.

Perché questo accade? Come posso evitarlo?

È stato utile?

Soluzione 3

La mia brutta soluzione a questo problema consiste nel impostare attiva la scheda in cui risiede il DTP prima di modificarne i valori, qualcosa del genere:

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);

Altri suggerimenti

Ho scoperto qual era il problema qui.

La proprietà Value imposta un nuovo valore solo se il controllo DateTimePicker è visibile. Altrimenti il ??comando viene ignorato.

Caso di prova:

Non funziona:

 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;

Opere:

 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);

Sembra non avere nulla a che fare con l'aggiunta programmatica del selettore, a quanto pare.

Ha a che fare con la proprietà Checked del datetimepicker. Di solito è impostato su false. Almeno questo era il problema per me.

Dopo aver impostato datetimepicker.check su true, ha recuperato il valore dalle impostazioni.

DateTimePicker ha alcuni problemi con l'archiviazione e il recupero del suo valore. Ho avuto problemi durante l'associazione del valore a un DateTime non nullable - Di tanto in tanto ho ricevuto NullReferenceExeptions. Non ho idea del perché o del quando. A volte è appena successo e ha provocato l'arresto anomalo dell'app.

Ho appena riscontrato lo stesso problema utilizzando due DateTimePicker. Sono stato in grado di far sì che entrambi mostrassero il valore corretto generandoli dinamicamente e aggiungendoli al modulo.

Se non riesci a farlo funzionare, puoi sempre provare a utilizzare un altro selettore. Il Any + Time (TM) Datepicker / Timepicker AJAX Calendar Widget estrae il suo valore dal campo associato, quindi se inizializzi il campo con un valore o cambi un campo per avere un valore (come in onload), questo è quello che otterrai quando viene visualizzato il selettore. E se hai problemi con esso, basta inviare un messaggio tramite la pagina dei contatti e verrà indirizzato al più presto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top