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..

57
demandé sur Community 2009-05-11 04:49:24

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"
42
répondu Sérgio Domingos 2016-05-16 18:43:42

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
27
répondu brasskazoo 2016-05-17 12:20:30

ç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!

20
répondu David Swindells 2013-10-11 08:37:03

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
5
répondu Catherine 2016-04-07 14:48:18

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.

4
répondu CA Martin 2016-01-09 01:41:38

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

non vérifié enter image description here

après vérification enter image description here

1
répondu Rijul Sudhir 2017-05-16 17:23:10