2009-09-09 8 views
6

Fakten:DateTimePicker Standardwert: Wie kann es vermieden werden?

  • ich eine TabControl mit 2 Tabs haben, hat jeder Tab 2 Datetimepicker.
  • Im Load-Ereignis habe ich den Wert aller DTPs festgelegt.
  • Alle DTPs haben ShowCheckBoxes auf True gesetzt und Checked auf False gesetzt.
  • Wenn ich das Programm ausführe, sind die DTPs in der ersten Registerkarte OK, aber wenn ich die DTPs auf der zweiten Registerkarte überprüfe, zeigen sie die aktuelle Zeit an, nicht die Zeit, die ich beim Load-Ereignis eingestellt habe.

Warum das passiert? Wie kann ich es vermeiden?

+0

+1, weil ich denke, ich habe ein ähnliches Problem. – reverendlarry

Antwort

1

Meine hässliche Abhilfe für dieses Problem besteht darin, auf aktiv gesetzt die Registerkarte in dem die reside der DTP vor seinen Werten zu ändern, so etwas wie:

DateTime dat1 = DateTime.Today; 
DateTime dat2 = dat1.AddDays(1).AddSeconds(-1); 

dtpCreatedStart.Value = dat1; 
dtpCreatedEnd.Value = dat2; 
tbc.SelectTab(1); 
dtpModifiedStart.Value = dat1; 
dtpModifiedEnd.Value = dat2; 
tbc.SelectTab(0); 
0

DateTimePicker hat einige Probleme beim Speichern und Abrufen des Wertes. Ich hatte Probleme beim Binden des Werts an eine nicht nullbare DateTime - ich habe von Zeit zu Zeit NullReferenceExpections. Keine Ahnung warum oder wann. Es ist manchmal einfach passiert und hat die App abgestürzt.

0

Ich lief gerade in das gleiche Problem mit zwei DateTimePickers. Ich konnte beide dazu bringen, den korrekten Wert zu zeigen, indem ich sie dynamisch erzeugte und sie dem Formular hinzufügte.

3

Ich habe herausgefunden, was das Problem hier war. Die Value-Eigenschaft legt nur einen neuen Wert fest, wenn das Steuerelement DateTimePicker sichtbar ist. Andernfalls wird der Befehl ignoriert.

Testfall:

funktioniert nicht:

this.picker = new DateTimePicker 
     { 
      Checked = false, 
      Font = new System.Drawing.Font("Verdana", 9.75F), 
      Format = System.Windows.Forms.DateTimePickerFormat.Time, 
      Location = new System.Drawing.Point(5, 5), 
      Name = "picker", 
      ShowUpDown = true, 
      Size = new System.Drawing.Size(120, 23), 
      Visible = false 
     }; 
     this.Controls.Add(this.picker); 
     this.picker.Value = this.picker.Value.Date.AddHours(1); 
     this.picker.Visible = true; 

Works:

this.picker = new DateTimePicker 
     { 
      Checked = false, 
      Font = new System.Drawing.Font("Verdana", 9.75F), 
      Format = System.Windows.Forms.DateTimePickerFormat.Time, 
      Location = new System.Drawing.Point(5, 5), 
      Name = "picker", 
      ShowUpDown = true, 
      Size = new System.Drawing.Size(120, 23), 
      Visible = false 
     }; 
     this.Controls.Add(this.picker); 
     this.picker.Visible = true; 
     this.picker.Value = this.picker.Value.Date.AddHours(1); 

scheint nicht alles programmatisch zu tun haben mit den Picker Zugabe es scheint.

+0

hmmm ... das ist interessant ... Ich werde sehen, wie das für mich funktionieren kann. – IAbstract

0

Wenn Sie es nicht, bekommen arbeiten können Sie Versuchen Sie immer, einen anderen Picker zu verwenden. Der Wert Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget bezieht seinen Wert aus dem zugehörigen Feld. Wenn Sie also das Feld mit einem Wert initialisieren oder ein Feld ändern, um einen Wert zu erhalten (z. B. in onload), erhalten Sie das Ergebnis, wenn die Auswahl angezeigt wird. Und wenn Sie Probleme damit haben, senden Sie einfach eine Nachricht über die Kontaktseite, und es wird so schnell wie möglich angesprochen.

3

Es hat mit der Checked-Eigenschaft des datetimepicker zu tun. Es ist normalerweise auf false gesetzt. Zumindest war das das Problem für mich.

Nachdem Sie datetimepicker.checked auf true festgelegt haben, wurde der Wert aus den Einstellungen abgerufen.

+0

In der Tat löste dies mein ähnliches Problem, komisch! – wpcoder

Verwandte Themen