助けてください?!問題は、datetimepicker コントロールを使用する古いユーザー コントロールがあるためです。datetimepicker のテキストボックスに表示する日付がない場合、.Value プロパティは DateTimePicker.MinimumDateTime に設定されます。.Value が DateTimePicker.MinimumDateTime の場合、OnValueChanged は CustomFormat を " " に更新します。それ以外の場合、CustomFormat は "yyy-MM-dd hh:mm:ss tt" です。
問題 ==> DropDown イベントで、最小日時を確認します。.Value がそれと等しい場合は、.Value を DateTime.Now に更新します。ドロップダウン カレンダーが表示されると、カレンダーは 1753-01-01 に設定され、テキスト ボックス (.Value) には DateTime.Now が表示されます。
DropDown イベントで更新された .Value プロパティに対応する日付をカレンダーに表示するにはどうすればよいですか? 値が DateTimePicker.MinimumDateTime から DateTime.Now に変更されたときに、DateTimePicker の最初の DropDown イベントを「キャンセル」する方法があったとしても、2 回目 (およびそれ以降) のドロップダウンカレンダーが表示される カレンダーは、テキスト ボックス (DateTimePicker.Value) に表示される日付と正しく一致します。
問題の DateTimePicker に接続したイベントのコードは次のとおりです。
private void ValueDatetimePickerOnKeyUp(Object sender, KeyEventArgs e)
{
if (e.KeyCode != Keys.Delete && e.KeyCode != Keys.Back)
return;
var dp = (DateTimePicker)sender;
if (dp == null)
return;
dp.Value = DateTimePicker.MinimumDateTime;
}
private void ValueDatetimePickerDropDown(Object sender, EventArgs e)
{
var dp = (DateTimePicker)sender;
if (dp == null)
return;
if (dp.Value == DateTimePicker.MinimumDateTime)
dp.Value = DateTime.Now;
}
private void ValueDatetimePickerValueChanged(Object sender, EventArgs e)
{
var dp = (DateTimePicker)sender;
if (dp == null)
return;
dp.CustomFormat = dp.Value == DateTimePicker.MinimumDateTime ? " " : "yyyy-MM-dd hh:mm:ss tt";
}