DateTimePicker が時間 (カスタム形式 h:mm) のみを表示するように設定された C# Windows フォーム コントロールがあり、ほとんどの場合、ユーザーは上/下ボタンをクリックして分を制御します。ただし、デフォルトでは、コントロールは時間を更新します。
これらのボタンでデフォルトで分を制御するにはどうすればよいですか?
おまけとして、分が60を過ぎたときに時間をロールフォワード/ロールバックすることは可能ですか?
DateTimePicker が時間 (カスタム形式 h:mm) のみを表示するように設定された C# Windows フォーム コントロールがあり、ほとんどの場合、ユーザーは上/下ボタンをクリックして分を制御します。ただし、デフォルトでは、コントロールは時間を更新します。
これらのボタンでデフォルトで分を制御するにはどうすればよいですか?
おまけとして、分が60を過ぎたときに時間をロールフォワード/ロールバックすることは可能ですか?
をdatetimePicker
取得するFocus
と、右側にキーが送信され、自動的に分の部分に移動します。
dateTimePicker1.GotFocus += new EventHandler(dateTimePicker1_GotFocus);
void dateTimePicker1_GotFocus(object sender, EventArgs e)
{
SendKeys.Send("{right}");
}
Edper の答えは正しいです。フォーカスを取得すると、自動的に datetimepicker が分を更新するように設定されます。ただし、分が 60 を過ぎても、時間の部分は自動的に進めたり戻したりしません。
そのためには KeyDown イベントを処理する必要があります。
これを試してください(Edperの答えと組み合わせました)。
private void Form1_Load(object sender, EventArgs e)
{
dateTimePicker1.CustomFormat = "h:mm";
dateTimePicker1.MouseWheel += new MouseEventHandler(dateTimePicker1_MouseWheel);
dateTimePicker1.KeyDown += new KeyEventHandler(dateTimePicker1_KeyDown);
dateTimePicker1.GotFocus += new EventHandler(dateTimePicker1_GotFocus);
}
void dateTimePicker1_GotFocus(object sender, EventArgs e)
{
SendKeys.Send("{right}");
}
void dateTimePicker1_MouseWheel(object sender, MouseEventArgs e)
{
if(e.Delta > 0)
dateTimePicker1.Value = dateTimePicker1.Value.AddMinutes(1);
else
dateTimePicker1.Value = dateTimePicker1.Value.AddMinutes(-1);
}
void dateTimePicker1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 38)
{
dateTimePicker1.Value = dateTimePicker1.Value.AddMinutes(1);
e.SuppressKeyPress = true;
}
else if (e.KeyValue == 40)
{
dateTimePicker1.Value = dateTimePicker1.Value.AddMinutes(-1);
e.SuppressKeyPress = true;
}
}
datetimepicker.create usercontrolをdatetimepickerでカスタマイズし、keydownイベントを処理する必要があります