7

事実:

  • 2 つのタブを持つ TabControl があり、各タブには 2 つの DateTimePicker があります。
  • Load イベントでは、すべての DTP の値を設定しました。
  • すべての DTP には、ShowCheckBoxes が true に設定され、Checked が false に設定されています。
  • プログラムを実行すると、最初のタブの DTP は問題ありませんが、2 番目のタブの DTP を確認すると、ロード イベントで設定した時間ではなく、現在の時間が表示されます。

なぜこれが起こるのですか?どうすれば回避できますか?

4

6 に答える 6

4

ここで何が問題なのかがわかりました。

このプロパティは、コントロールが表示さValueれている場合にのみ新しい値を設定します。DateTimePickerそれ以外の場合、コマンドは無視されます。

テストケース:

動作しません:

 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;

作品:

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

プログラムでピッカーを追加することとは何の関係もないようです。

于 2009-11-18T00:40:09.677 に答える
3

これは、datetimepicker の Checked プロパティに関係しています。通常は false に設定されます。少なくとも私にはそれが問題でした。

datetimepicker.checked を true に設定した後、設定から値を取得しました。

于 2014-11-19T19:06:57.187 に答える
1

この問題に対する私の醜い回避策は、次のような値を変更する前に、DTP が存在するタブをアクティブに設定することです。

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);
于 2009-12-11T19:58:00.890 に答える
0

DateTimePicker には、その値の保存と取得に関するいくつかの問題があります。Value を null 非許容の DateTime にバインドするときに問題が発生しました - ときどき NullReferenceExeptions を取得しました。理由も時期もわかりません。時々それが起こり、アプリがクラッシュしました。

于 2009-10-24T15:12:46.070 に答える
0

If you can't get it to work, you can always try using a different picker. The Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget pulls its value from the associated field, so if you initialize the field with a value, or change a field to have a value (such as in onload), then that's what you'll get when the picker is displayed. And if you have problems with it, just submit a message via the contact page, and it will be addressed ASAP.

于 2010-04-23T14:20:18.097 に答える
0

2 つの DateTimePicker を使用して同じ問題に遭遇しました。それらを動的に生成してフォームに追加することで、両方に正しい値を表示させることができました。

于 2009-11-12T21:51:08.417 に答える