我在C#中有几个DateTimePicker控件,我需要限制用户只能从30分钟的间隔中进行选择,例如9:00-> 9:30-> 10:00-> 10:30,依此类推。这可能吗?
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;
}
这应该工作。您需要全局变量/属性来存储_prevDate。您在Form1()或窗体加载中设置_prevDate。
我们每次如何添加/删除30分钟。
在值更改事件中,您将获取当前的dataPicker值,然后计算currentValue和prevValue之间的差。如果值> 0添加,并且值<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放进去。参见代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句