2009-09-09 17 views
6

fatti:DateTimePicker Valore predefinito: come evitarlo?

  • Ho un TabControl con 2 Compresse, ciascuno ha 2 DateTimePicker.
  • Nell'evento Load, imposto il valore di tutti i DTP.
  • Tutti gli DTP hanno ShowCheckBoxes impostato su true AND Checked impostato su false.
  • Quando Eseguo il programma, gli DTP nella prima scheda sono OK, ma quando controllo gli DTP nella seconda scheda, mostrano l'ora corrente, non l'ora impostata sull'evento di caricamento.

Perché questo succede? Come posso evitarlo?

+0

+1 perché penso di avere un problema simile. – reverendlarry

risposta

1

mio brutto soluzione a questo problema, si compone sul set attiva nella scheda in cui risiedono del DTP prima di cambiare i suoi valori, qualcosa di simile:

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

DateTimePicker ha alcuni problemi con l'archiviazione e il recupero del suo valore. Ho avuto problemi durante l'associazione del valore a un valore Datetime non annullabile: di tanto in tanto ricevevo NullReferenceExeptions. Non ho idea del perché o quando. A volte è appena successo e si è bloccato l'app.

0

Ho appena eseguito lo stesso problema utilizzando due DateTimePickers. Sono riuscito a far sì che entrambi mostrassero il valore corretto generandoli dinamicamente e aggiungendoli al modulo.

3

Ho scoperto qual era il problema.

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

Test case:

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; 

Works:

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

non sembra avere nulla a che fare con l'aggiunta di programatically il selettore a quanto pare.

+0

hmmm ... questo è interessante ... vedrò come questo può funzionare per me. – IAbstract

0

Se non è possibile farlo funzionare, è possibile prova sempre a utilizzare un altro selettore. Il valore Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget estrae il suo valore dal campo associato, quindi se si inizializza il campo con un valore o si modifica un campo per avere un valore (ad esempio nell'onload), questo è ciò che si otterrà quando viene visualizzato il selettore. E se hai problemi con questo, basta inviare un messaggio tramite la pagina dei contatti, e sarà affrontato al più presto.

3

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

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

+0

In effetti questo ha risolto il mio problema simile, strano! – wpcoder