visual vacio usar como blanco .net winforms datetimepicker

.net - vacio - ¿Cómo puedo hacer que un DateTimePicker muestre una cadena vacía?



datetimepicker en blanco c# (6)

Me gustaría poder mostrar un DateTimePicker que tiene un valor predeterminado de nada, es decir, sin fecha.

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.

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

He considerado usar una casilla de verificación para controlar la habilitación de este campo, pero todavía existe la cuestión de mostrar un valor inicial.

Editar:
Podría decirse que es 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, por lo que creo que debería permanecer aquí para que otros la encuentren.


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, tengo esto:

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

Esto le permite visualizar y usar un valor de fecha vacía, pero aún así le permite al usuario poder cambiar la fecha a algo cuando lo desee.

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


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 cambiada de valor

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á marcado

Cuando está marcado


En caso de que alguien tenga un problema al configurar 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:

ASEGÚRESE DE que CustomFormat = " " tenga el mismo 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


Ofuscación del valor mediante el uso de la propiedad CustomFormat , utilizando la casilla de verificación cbEnableEndDate como indicador para indicar si otro código debe 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


Simplemente configure la propiedad de la siguiente manera:

Cuando el usuario presiona "borrar el botón" o "eliminar la tecla" hacer

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

En el evento DateTimePicker1_ValueChanged do

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


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 = " "; }

buen chico!