2009-05-11 10 views
52

Je voudrais être en mesure d'afficher un DateTimePicker qui a une valeur par défaut de rien, c'est-à-dire aucune date.Comment faire pour que DateTimePicker affiche une chaîne vide?

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 renseignée initialement.

J'ai spécifié un format personnalisé de yyyy-MM-dd pour les deux contrôles.

La définition de la valeur null, ou une chaîne vide lors de l'exécution provoque une erreur, alors comment puis-je accomplir cela?

j'envisagé d'utiliser une case à cocher pour contrôler l'activation de ce champ, mais il reste encore la question de l'affichage d'une valeur initiale ..

Edit:
On peut dire un double de la question DateTimePicker Null Value (.NET), mais la solution que j'ai trouvée pour mon problème n'est pas une solution pour cette question, donc je pense qu'il devrait rester ici pour que d'autres trouvent ..

+0

double possible de [DateTimePicker Null Value (.NET)] (http://stackoverflow.com/questions/284364/datetimepicker-null-value-net) – bluish

Répondre

26

Obfuscating la valeur en utilisant la propriété CustomFormat, en utilisant la case à cocher cbEnableEndDate comme drapeau pour indiquer si 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 
+1

Tricksy/hacky b ut efficace. :) –

19

cela a fonctionné pour moi C#

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

nice gars!

40

Il suffit de définir la propriété comme suit:

Lorsque la presse utilisateur "bouton d'effacement" ou "supprimer la clé" do

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

En DateTimePicker1_ValueChanged cas faire

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

@threeFourOneSixOneThree - Je suppose que cela semblait être le plus approprié. Et je n'avais pas la qualification de réputation pour commenter. – Jon

+0

Il fonctionne également pour définir 'dtpData.Format = DateTimePickerFormat.Short' (ou un autre format) au lieu de' dtpData.CustomFormat = "jj/MM/aaaa hh: mm: ss" ' – mbomb007

5

Dans le cas où tout le monde a un problème avec la définition du contrôle datetimepicker à vide pendant l'événement de chargement de formulaire, puis affiche la date actuelle selon les besoins, voici un exemple:

ASSURER QUE CustomFormat = " " a même nombre de places (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 
+1

Je pense que vous devez modifier votre formatage un peu ici. – Polynomial

+1

J'ai déjà essayé. n'a pas aidé beaucoup – Catherine

+0

@Catherine La norme est pour les noms de variables pour commencer par une lettre minuscule. Changer pour cela améliore la mise en forme, car c'est ce que Stack Overflow attend pour .NET. – mbomb007

4

Quand je veux afficher une valeur de date vide que je fais

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

Puis, quand la l'utilisateur clique sur le contrôle que 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 encore Laisser l'utilisateur être en mesure de changer la date à quelque chose quand ils le souhaitent. Gardez à l'esprit que sStrDate a déjà été validé en tant que chaîne de date valide.

0

Le concept de base est le même dit par d'autres.Mais c'est plus facile à implémenter de cette façon quand vous avez plusieurs datesTimePicker.

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 fonction d'événement changé

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

Si elle est décochée enter image description here

Quand elle est cochée enter image description here

Questions connexes