DateTimePicker Valore predefinito: come evitarlo?
-
05-07-2019 - |
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?
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.