将DateTimePicker限制为30分钟

时间:2014-09-23 02:35:58

标签: c# datetimepicker intervals

我在C#中有几个DateTimePicker控件,我需要限制用户只选择30分钟的间隔,例如9:00 - > 9:30 - > 10:00 - > 10:30,等等。这可能吗?

1 个答案:

答案 0 :(得分:3)

    public Form1()
    {
        InitializeComponent();

        if (dt.Minute % 30 > 15)
        {
            initialValue = true;
            dateTimePicker1.Value = dt.AddMinutes(dt.Minute % 30);
        }
        else
        {
            initialValue = true;
            dateTimePicker1.Value = dt.AddMinutes(-(dt.Minute % 30));
        }

        _prevDate = dateTimePicker1.Value;

    }


    private DateTime _prevDate;
    private bool initialValue = false;

    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        if(initialValue)
        {
            initialValue = false;
            return;
        }

        DateTime dt = dateTimePicker1.Value;
        TimeSpan diff = dt - _prevDate;

        if (diff.Ticks < 0) 
            dateTimePicker1.Value = _prevDate.AddMinutes(-30);
        else 
            dateTimePicker1.Value = _prevDate.AddMinutes(30);

        _prevDate = dateTimePicker1.Value;
    }

这应该有效。您需要全局变量/ Property来存储_prevDate。在Form1()或Form Load中设置_prevDate。

我们如何每次添加/删除30分钟。

在值更改事件中,您将获取当前的dataPicker值,之后计算currentValue和prevValue之间的差异。如果值> 0添加,值&lt; 0删除。

如果您不知道如何更改DatePicker以显示分钟,则需要在设计器中添加此内容。 你需要这个代码:

        this.dateTimePicker2.CustomFormat = "dd/MM/yyyy hh:mm";
        this.dateTimePicker2.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
        this.dateTimePicker2.ShowUpDown = true;

编辑: 我添加代码将在00或30上启动DataPicker,具体取决于30或00的接近程度。您需要另一个类型为bool的全局变量,它将放置dateTimePicker的initialValue。见代码。