我在C#中有几个DateTimePicker控件,我需要限制用户只选择30分钟的间隔,例如9:00 - > 9:30 - > 10:00 - > 10:30,等等。这可能吗?
答案 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。见代码。