C# DateTimePicker默认为下周的星期五

C# DateTimePicker默认为下周的星期五,c#,datetimepicker,C#,Datetimepicker,有没有一种方法可以将DateTimePicker默认为下一个星期五,这样它也应该默认为下一个星期的星期五。即使他们选择了本周的星期五。 我尝试使用以下代码:但是在修改 if(selectedDate.DayOfWeek!=DayOfWeek.Friday)to: if(selectedDate.DayOfWeek==DayOfWeek.Friday)it循环。当下面的设置为Friday时,它会点击已更改的事件并显示为Friday,(selectedDate.DayOfWeek==DayOfWee

有没有一种方法可以将DateTimePicker默认为下一个星期五,这样它也应该默认为下一个星期的星期五。即使他们选择了本周的星期五。 我尝试使用以下代码:但是在修改
if(selectedDate.DayOfWeek!=DayOfWeek.Friday)
to:
if(selectedDate.DayOfWeek==DayOfWeek.Friday)
it循环。当下面的设置为Friday时,它会点击已更改的事件并显示为Friday,
(selectedDate.DayOfWeek==DayOfWeek.Friday)
代码也会导致无限循环

var dtp = pSender as DateTimePicker;
var selectedDate = dtp.Value;

if (selectedDate.DayOfWeek != DayOfWeek.Friday)
{
   var offset = (int)DayOfWeek.Friday - (int)selectedDate.DayOfWeek + 7;  //Friday after current week.
   var friday = selectedDate + TimeSpan.FromDays(offset);

   dtp.Value = friday;
}

感谢您的时间,

如果您处理
DateTimePicker.ValueChanged
事件并更改其中的值,这将是一个无限循环。您可以只在
窗体的构造函数中执行该操作,也可以检查是否以编程方式完成:

private bool dtpChangedManually = false;
protected void Dtp_ValueChanged(Object sender, EventArgs e)
{
    if (dtpChangedManually)
    {
        dtpChangedManually = false;
        return;
    }

    dtpChangedManually = true;

    var pSender = (DateTimePicker) sender;
    int daysUntilFridDay = ((int)DayOfWeek.Friday - (int)pSender.Value.DayOfWeek + 7) % 7;
    if(daysUntilFridDay == 0) daysUntilFridDay = 7;
    DateTime nextFriday = pSender.Value.AddDays(daysUntilFridDay);
    pSender.Value = nextFriday;
}

当然,如果您处理
DateTimePicker.ValueChanged
事件并更改其中的值,则这是一个无限循环。您可以只在
窗体的构造函数中执行该操作,也可以检查是否以编程方式完成:

private bool dtpChangedManually = false;
protected void Dtp_ValueChanged(Object sender, EventArgs e)
{
    if (dtpChangedManually)
    {
        dtpChangedManually = false;
        return;
    }

    dtpChangedManually = true;

    var pSender = (DateTimePicker) sender;
    int daysUntilFridDay = ((int)DayOfWeek.Friday - (int)pSender.Value.DayOfWeek + 7) % 7;
    if(daysUntilFridDay == 0) daysUntilFridDay = 7;
    DateTime nextFriday = pSender.Value.AddDays(daysUntilFridDay);
    pSender.Value = nextFriday;
}

当然,如果您处理
DateTimePicker.ValueChanged
事件并更改其中的值,则这是一个无限循环。您可以只在
窗体的构造函数中执行该操作,也可以检查是否以编程方式完成:

private bool dtpChangedManually = false;
protected void Dtp_ValueChanged(Object sender, EventArgs e)
{
    if (dtpChangedManually)
    {
        dtpChangedManually = false;
        return;
    }

    dtpChangedManually = true;

    var pSender = (DateTimePicker) sender;
    int daysUntilFridDay = ((int)DayOfWeek.Friday - (int)pSender.Value.DayOfWeek + 7) % 7;
    if(daysUntilFridDay == 0) daysUntilFridDay = 7;
    DateTime nextFriday = pSender.Value.AddDays(daysUntilFridDay);
    pSender.Value = nextFriday;
}

当然,如果您处理
DateTimePicker.ValueChanged
事件并更改其中的值,则这是一个无限循环。您可以只在
窗体的构造函数中执行该操作,也可以检查是否以编程方式完成:

private bool dtpChangedManually = false;
protected void Dtp_ValueChanged(Object sender, EventArgs e)
{
    if (dtpChangedManually)
    {
        dtpChangedManually = false;
        return;
    }

    dtpChangedManually = true;

    var pSender = (DateTimePicker) sender;
    int daysUntilFridDay = ((int)DayOfWeek.Friday - (int)pSender.Value.DayOfWeek + 7) % 7;
    if(daysUntilFridDay == 0) daysUntilFridDay = 7;
    DateTime nextFriday = pSender.Value.AddDays(daysUntilFridDay);
    pSender.Value = nextFriday;
}

谢谢,蒂姆,很好。我已经完成了代码,可以看出哪里出了问题。我尝试过的一件事是将其添加到自己的函数中,并在事件中调用此函数。。但是,发件人周围存在错误。这是不可能的吗?您只能在事件中访问
发送者
参数,如果您调用一个方法,您应该传递
日期时间选择器
,或者让该方法只返回
日期时间
。非常感谢您的帮助!谢谢,谢谢,蒂姆,很好。我已经完成了代码,可以看出哪里出了问题。我尝试过的一件事是将其添加到自己的函数中,并在事件中调用此函数。。但是,发件人周围存在错误。这是不可能的吗?您只能在事件中访问
发送者
参数,如果您调用一个方法,您应该传递
日期时间选择器
,或者让该方法只返回
日期时间
。非常感谢您的帮助!谢谢,谢谢,蒂姆,很好。我已经完成了代码,可以看出哪里出了问题。我尝试过的一件事是将其添加到自己的函数中,并在事件中调用此函数。。但是,发件人周围存在错误。这是不可能的吗?您只能在事件中访问
发送者
参数,如果您调用一个方法,您应该传递
日期时间选择器
,或者让该方法只返回
日期时间
。非常感谢您的帮助!谢谢,谢谢,蒂姆,很好。我已经完成了代码,可以看出哪里出了问题。我尝试过的一件事是将其添加到自己的函数中,并在事件中调用此函数。。但是,发件人周围存在错误。这是不可能的吗?您只能在事件中访问
发送者
参数,如果您调用一个方法,您应该传递
日期时间选择器
,或者让该方法只返回
日期时间
。非常感谢您的帮助!谢谢