2009-09-09 22 views
6

Datos:DateTimePicker Valor predeterminado: ¿Cómo evitarlo?

  • que tienen un TabControl con 2 tabletas, cada uno tiene 2 DateTimePicker.
  • En el evento Load, configuré el valor de todos los DTP.
  • Todos los DTP tienen ShowCheckBoxes configurado en verdadero Y marcado establecido en falso.
  • Cuando ejecuto el programa, los DTP en la primera pestaña son correctos, pero cuando reviso los DTP en la segunda pestaña, muestran la hora actual, no la hora que configuré en el evento de carga.

¿Por qué sucede esto? ¿Cómo puedo evitarlo?

+0

+1 porque creo que tengo un problema similar. – reverendlarry

Respuesta

1

Mi fea solución a este problema, consiste en establecer activa la pestaña en la que residen del DTP antes de cambiar sus valores, algo como esto:

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 tiene algunos problemas para almacenar y recuperar su valor. Tuve problemas al vincular el valor a un DateTime que no admite valores NULL - Obtuve NullReferenceExeptions de vez en cuando. Ni idea de por qué ni cuándo. A veces simplemente sucedió y se estrelló la aplicación.

0

Acabo de encontrarme con el mismo problema al usar dos DateTimePickers. Logré que los dos mostraran el valor correcto al generarlos dinámicamente y agregarlos al formulario.

3

Descubrí cuál era el problema aquí.

La propiedad Value solo establece un nuevo valor si el control DateTimePicker está visible. De lo contrario, el comando se ignora.

caso de prueba:

no funciona:

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; 

Obras:

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

no parece tener nada que ver con la adición programáticamente el selector de lo que parece.

+0

hmmm ... esto es interesante ... Veré cómo esto puede funcionar para mí. – IAbstract

0

Si no puede conseguir que funcione, puede siempre intente usar un selector diferente. El Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget obtiene su valor del campo asociado, por lo que si inicializa el campo con un valor, o cambia un campo para tener un valor (como en onload), eso es lo que obtendrá cuando se muestre el selector. Y si tiene problemas, simplemente envíe un mensaje a través de la página de contacto, y se lo enviará lo antes posible.

3

Tiene que ver con la propiedad Comprobada del datetimepicker. Por lo general, se establece en falso. Al menos ese fue el problema para mí.

Después de establecer el datetimepicker.checked en true, recuperó el valor de la configuración.

+0

De hecho, esto resolvió mi problema similar, ¡raro! – wpcoder