1

DateTimePicker が時間 (カスタム形式 h:mm) のみを表示するように設定された C# Windows フォーム コントロールがあり、ほとんどの場合、ユーザーは上/下ボタンをクリックして分を制御します。ただし、デフォルトでは、コントロールは時間を更新します。

これらのボタンでデフォルトで分を制御するにはどうすればよいですか?

おまけとして、分が60を過ぎたときに時間をロールフォワード/ロールバックすることは可能ですか?

4

4 に答える 4

1

datetimePicker取得するFocusと、右側にキーが送信され、自動的に分の部分に移動します。

dateTimePicker1.GotFocus += new EventHandler(dateTimePicker1_GotFocus);

void dateTimePicker1_GotFocus(object sender, EventArgs e)
{
 SendKeys.Send("{right}");
}
于 2013-10-23T04:04:10.727 に答える
1

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;
        }
    }
于 2013-10-23T04:15:14.243 に答える
0

datetimepicker.create usercontrolをdatetimepickerでカスタマイズし、keydownイベントを処理する必要があります

于 2013-10-23T03:23:33.473 に答える