Frage

Daten:

  • Ich habe ein TabControl mit zwei Tabs, Jede Registerkarte hat zwei Datetimepicker.
  • Im Load-Ereignis, habe ich den Wert aller DTPs.
  • Alle DTPs haben ShowCheckBoxes auf true gesetzt und Karomuster auf false gesetzt.
  • Wenn ich das Programm ausführen, werden die DTPs in der ersten Registerkarte sind in Ordnung, aber wenn ich die DTPs auf der zweiten Registerkarte überprüfen, sie zeigen aktuelle Zeit, die nicht die Zeit, die ich auf dem Ladeereignis gesetzt.

Warum geschieht das? Wie kann ich es vermeiden?

War es hilfreich?

Lösung 3

zu diesem Thema Mein hässliches Problem zu umgehen, besteht darin, auf aktiv gesetzt die Registerkarte in dem die reside der DTP vor seinen Werten, so etwas wie dies zu ändern:

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

Andere Tipps

Ich fand heraus, was das Problem war hier.

Die Value Eigenschaft setzt nur einen neuen Wert, wenn der DateTimePicker Steuerelement sichtbar ist. Ansonsten ignoriert Befehl wird.

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

Erscheint nicht etwas mit programmatisch Hinzufügen der Kommissionierer zu tun, es scheint.

Es hat mit der Eigenschaft Checked des Datetimepicker zu tun. Es wird in der Regel auf false gesetzt. Wenigstens war, dass das Problem für mich.

Nach dem datetimepicker.checked auf true setzen, hat es den Wert von Einstellungen abgerufen werden.

Datetime hat einige Probleme mit dem Speichern und Abrufen es Wert. Ich hatte Probleme, wenn der Wert zu einem nicht auf NULL festlegbare Datetime-Bindung - ich NullReferenceExeptions von Zeit zu Zeit. Keine Ahnung, warum oder wann. Es ist manchmal einfach passiert und stürzte die App.

Ich lief in das gleiche Problem mit zwei DateTimePickers. Ich war in der Lage, beide zu bekommen den richtigen Wert zu zeigen, indem sie dynamisch zu erzeugen und das Hinzufügen von ihnen in das Formular.

Wenn Sie es nicht zur Arbeit kommen, können Sie immer versuchen, einen anderen Wähler. Das Alles + Time (TM) Datepicker / Timepicker AJAX Calendar Widget seinen Wert aus dem zugehörigen Feld zieht, also, wenn Sie das Feld mit einem Wert initialisieren, oder ein Feld ändern, um einen Wert (wie in onload) haben, dann ist das, was Sie bekommen, wenn die Kommissionierer angezeigt wird. Und wenn Sie Probleme damit haben, senden Sie einfach eine Mitteilung über die Kontaktseite, und es wird so schnell wie möglich behandelt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top