.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;
}
}
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!