2009-05-11 36 views
52

Me gustaría poder mostrar un DateTimePicker que tiene un valor predeterminado de nada, es decir, sin fecha.¿Cómo puedo hacer que un DateTimePicker muestre una cadena vacía?

Por ejemplo, tengo una fecha de inicio dtTaskStart y una fecha de finalización dtTaskEnd para una tarea, pero la fecha de finalización no se conoce y no se rellena inicialmente.

He especificado un formato personalizado de yyyy-MM-dd para ambos controles.

establece el valor en null, o una cadena vacía en tiempo de ejecución provoca un error, así que ¿cómo puedo lograr esto?

he considerado el uso de una casilla de verificación para controlar la activación de este campo, pero aún queda el problema de mostrar un valor inicial ..

Editar:
Podría decirse que un duplicado de la pregunta DateTimePicker Null Value (.NET), pero la solución que encontré para mi problema no es una solución para esa pregunta, así que creo que debe permanecer aquí para que otros encuentren ..

+0

posible duplicado de [DateTimePicker El valor nulo (NET)] (http://stackoverflow.com/questions/284364/datetimepicker-null-value-net) – bluish

Respuesta

26

Ofuscar el valor utilizando la propiedad CustomFormat, usando casilla cbEnableEndDate como la bandera para indicar si otro código debería ignorar el valor:

If dateTaskEnd > Date.FromOADate(0) Then 
    dtTaskEnd.Format = DateTimePickerFormat.Custom 
    dtTaskEnd.CustomFormat = "yyyy-MM-dd" 
    dtTaskEnd.Value = dateTaskEnd 
    dtTaskEnd.Enabled = True 
    cbEnableEndDate.Checked = True 
Else 
    dtTaskEnd.Format = DateTimePickerFormat.Custom 
    dtTaskEnd.CustomFormat = " " 
    dtTaskEnd.Value = Date.FromOADate(0) 
    dtTaskEnd.Enabled = False 
    cbEnableEndDate.Checked = False 
End If 
+1

Tricksy/hacky b ut efectivo. :) –

19

Esto funcionó para mí para C#

if (enableEndDateCheckBox.Checked == true) 
{ 
    endDateDateTimePicker.Enabled = true; 
    endDateDateTimePicker.Format = DateTimePickerFormat.Short;     
} 
else 
{ 
    endDateDateTimePicker.Enabled = false; 
    endDateDateTimePicker.Format = DateTimePickerFormat.Custom; 
    endDateDateTimePicker.CustomFormat = " "; 
} 

uno de los buenos chicos!

40

acaba de establecer la propiedad como sigue:

Cuando el usuario pulse el botón "claro" o "Borrar tecla" hacer

dtpData.CustomFormat = " " 'An empty SPACE 
dtpData.Format = DateTimePickerFormat.Custom 

En DateTimePicker1_ValueChanged caso hacer

dtpData.CustomFormat = "dd/MM/yyyy hh:mm:ss" 
+0

@threeFourOneSixOneThree - Supongo que porque parecía ser el más apropiado. Y no tenía la calificación de reputación para comentar. – Jon

+0

También funciona para establecer 'dtpData.Format = DateTimePickerFormat.Short' (o algún otro formato) en lugar de' dtpData.CustomFormat = "dd/MM/aaaa hh: mm: ss" ' – mbomb007

5

En caso de que alguien tiene un problema al establecer el control datetimepicker en blanco durante el evento de carga de formulario, y luego mostrar la fecha actual según sea necesario, aquí hay un ejemplo:

COMPROBAR QUE CustomFormat = " " tiene igual número de espacios (al menos un espacio) en ambos métodos

Private Sub setDateTimePickerBlank(ByVal dateTimePicker As DateTimePicker)  

    dateTimePicker.Visible = True 
    dateTimePicker.Format = DateTimePickerFormat.Custom 
    dateTimePicker.CustomFormat = " " 
End Sub 


Private Sub dateTimePicker_MouseHover(ByVal sender As Object, ByVal e As 
        System.EventArgs) Handles dateTimePicker.MouseHover 

    Dim dateTimePicker As DateTimePicker = CType(sender, DateTimePicker) 
    If dateTimePicker.Text = " " Then 
     dateTimePicker.Text = Format(DateTime.Now, "MM/dd/yyyy") 
    End If 
End Sub 
+1

Creo que necesita editar su formateo un poco aquí. – Polynomial

+1

Lo intenté ya. no ayudó mucho – Catherine

+0

@Catherine El estándar es para nombres de variables para comenzar con una letra minúscula. Cambiar a esto mejora el formato, porque eso es lo que Stack Overflow espera de .NET. – mbomb007

4

Cuando quiero mostrar un valor de fecha vacío hago esto

  if (sStrDate != "") 
      { 
       dateCreated.Value = DateTime.Parse(sStrDate); 
      } 
      else 
      { 
       dateCreated.CustomFormat = " "; 
       dateCreated.Format = DateTimePickerFormat.Custom; 
      } 

Luego, cuando el usuario hace clic en el control que tengo esto:

  private void dateControl_MouseDown(object sender, MouseEventArgs e) 
      { 
       ((DateTimePicker)sender).Format = DateTimePickerFormat.Long;  
      } 

esto le permite visualizar y utilizar un valor de fecha vacía, pero sigue siendo una Haga que el usuario pueda cambiar la fecha a algo cuando lo desee.

Tenga en cuenta que sStrDate ya se ha validado como una cadena de fecha válida.

0

El concepto básico es el mismo contado por otros.Pero es más fácil de implementar de esta manera cuando tienes múltiples dateTimePicker.

dateTimePicker1.Value = DateTime.Now; 
dateTimePicker1.ValueChanged += new System.EventHandler(this.Dtp_ValueChanged); 
dateTimePicker1.ShowCheckBox=true; 
dateTimePicker1.Checked=false; 


dateTimePicker2.Value = DateTime.Now; 
dateTimePicker2.ValueChanged += new System.EventHandler(this.Dtp_ValueChanged); 
dateTimePicker2.ShowCheckBox=true; 
dateTimePicker2.Checked=false; 

la función de evento de valor cambiado

 void Dtp_ValueChanged(object sender, EventArgs e) 
     { 
      if(((DateTimePicker)sender).ShowCheckBox==true) 
      { 
       if(((DateTimePicker)sender).Checked==false) 
       { 
        ((DateTimePicker)sender).CustomFormat = " "; 
        ((DateTimePicker)sender).Format = DateTimePickerFormat.Custom; 
       } 
       else 
       { 
        ((DateTimePicker)sender).Format = DateTimePickerFormat.Short; 
       } 
      } 
      else 
      { 
       ((DateTimePicker)sender).Format = DateTimePickerFormat.Short; 
      } 
     } 

Cuando no está marcada enter image description here

Cuando está marcada enter image description here

Cuestiones relacionadas