Comment faire pour qu'un DateTimePicker affiche une chaîne vide?
je voudrais pouvoir afficher un DateTimePicker
qui a une valeur par défaut de rien, c.-à-d. pas de date.
par exemple, j'ai une date de début dtTaskStart
et une date de fin dtTaskEnd
pour une tâche, mais la date de fin n'est pas connue, et n'est pas remplie au départ.
j'ai spécifié un format personnalisé de yyyy-MM-dd
pour les deux contrôles.
définir la valeur à null
, ou une chaîne vide à l'exécution provoque une erreur, alors, comment puis-je accomplir?
j'ai envisagé d'utiliser une case à cocher pour contrôler l'activation de ce champ, mais il reste le problème de l'affichage d'une valeur initiale..
Edit:
Sans doute un duplicata de la question DateTimePicker valeur nulle (.NET) , mais la solution que j'ai trouvé pour mon problème n'est pas une solution pour cette question, donc je pense qu'il devrait rester ici pour les autres à trouver..
6 réponses
il suffit de régler la propriété comme suit:
Lorsque l'utilisateur d'appuyer sur le "bouton effacer" ou "touche " supprimer" ne
dtpData.CustomFormat = " " 'An empty SPACE
dtpData.Format = DateTimePickerFormat.Custom
Sur DateTimePicker1_ValueChanged
événement
dtpData.CustomFormat = "dd/MM/yyyy hh:mm:ss"
masquant la valeur en utilisant la propriété CustomFormat
, en cochant la case cbEnableEndDate
comme drapeau pour indiquer si un autre code devrait ignorer la valeur:
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
ça a marché pour moi pour c#
if (enableEndDateCheckBox.Checked == true)
{
endDateDateTimePicker.Enabled = true;
endDateDateTimePicker.Format = DateTimePickerFormat.Short;
}
else
{
endDateDateTimePicker.Enabled = false;
endDateDateTimePicker.Format = DateTimePickerFormat.Custom;
endDateDateTimePicker.CustomFormat = " ";
}
un gentil gars!
dans le cas où quelqu'un a un problème avec le réglage du contrôle datetimepicker à blanc pendant l'événement de charge de formulaire, puis afficher la date actuelle si nécessaire, voici un exemple:
S'assurer que CustomFormat = " "
a le même nombre d'espaces (au moins un espace) dans les deux méthodes
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
quand je veux afficher une valeur de date vide je fais ceci
if (sStrDate != "")
{
dateCreated.Value = DateTime.Parse(sStrDate);
}
else
{
dateCreated.CustomFormat = " ";
dateCreated.Format = DateTimePickerFormat.Custom;
}
puis quand l'utilisateur clique sur la commande j'ai ceci:
private void dateControl_MouseDown(object sender, MouseEventArgs e)
{
((DateTimePicker)sender).Format = DateTimePickerFormat.Long;
}
cela vous permet d'afficher et d'utiliser une valeur de date vide, mais permet tout de même à l'utilisateur de changer la date à quelque chose quand il le souhaite.
gardez à l'esprit que sStrDate a déjà été validé en tant que chaîne de date valide.
le concept de base est le même dit par d'autres. Mais c'est plus facile à mettre en œuvre de cette façon quand vous avez plusieurs 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 valeur d'événements de changement de fonction
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;
}
}