源代码:private void dtpValidDate_ValueChanged(object sender, EventArgs e)
{
DateTime td = GetSerialNoDate(dtpValidDate.Value);
dtpValidDate.Value = td;
}private DateTime GetSerialNoDate(DateTime oriDateTime)
{
if (oriDateTime.Day < 10)
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 10);
else if (oriDateTime.Day < 20)
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 20);
else
{
oriDateTime = oriDateTime.AddMonths(1);
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 1).AddDays(-1);
}
return oriDateTime;
}
{
DateTime td = GetSerialNoDate(dtpValidDate.Value);
dtpValidDate.Value = td;
}private DateTime GetSerialNoDate(DateTime oriDateTime)
{
if (oriDateTime.Day < 10)
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 10);
else if (oriDateTime.Day < 20)
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 20);
else
{
oriDateTime = oriDateTime.AddMonths(1);
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 1).AddDays(-1);
}
return oriDateTime;
}
但是对datetimepicker,我也不知道。
//取消事件
this.yourDateTimePicker.ValueChanged-=new EventHandler(yourDateTimePicker_ValueChanged);
//赋值
this.yourDateTimePicker.Value = this.dateTimePicker1.Value;
//重新注册事件
this.yourDateTimePicker.ValueChanged+=new EventHandler(yourDateTimePicker_ValueChanged);
DateTime dt=dtp.Value;
然后对dt做必要的处理,直到dt是满足要求的值为止,最后使用下面的语句重新给dtp赋值:
if(dtp.Value!=dt)
dtp.Value=dt;
注意到上面的判断语句了吗?这样就不会死循环了。这种方法在TextBox等控件的TextChange事件中同样有效。