DateTimePickerデフォルト値:回避方法
-
05-07-2019 - |
質問
事実:
- 2つのタブを持つTabControlがあり、各タブには2つのDateTimePickerがあります。
- Loadイベントで、すべてのDTPの値を設定します。
- すべてのDTPのShowCheckBoxesはtrueに設定され、Checkedはfalseに設定されています。
- プログラムを実行すると、最初のタブのDTPは問題ありませんが、2番目のタブでDTPを確認すると、ロードイベントに設定した時間ではなく現在の時間が表示されます。
これはなぜ起こるのですか?どうすれば回避できますか?
解決 3
この問題に対する私のい回避策は、値を変更する前に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);
他のヒント
ここで問題が何であるかがわかりました。
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);
ピッカーをプログラム的に追加することとは関係がないようです。
datetimepickerのCheckedプロパティに関係しています。通常はfalseに設定されます。少なくとも私にとっては問題でした。
datetimepicker.checkedをtrueに設定した後、設定から値を取得しました。
DateTimePickerには、その値の保存と取得に関する問題がいくつかあります。 Valueをnullを許可しないDateTimeにバインドするときに問題が発生しました-NullReferenceExeptionsを時々取得しました。なぜ、いつかわからない。たまに起こってアプリをクラッシュさせたことがありました。
2つのDateTimePickerを使用して同じ問題に遭遇しました。それらを動的に生成してフォームに追加することで、両方に正しい値を表示させることができました。
機能しない場合は、いつでも別のピッカーを使用してみてください。 Any + Time(TM)Datepicker / Timepicker AJAXカレンダーウィジェットは、関連するフィールドから値を取得します。そのため、フィールドを値で初期化するか、フィールドを変更して値を持つようにすると(onloadなど)、ピッカーが表示されたときにそれが得られます。問題が発生した場合は、連絡先ページからメッセージを送信してください。すぐに対処されます。