C# C datetimepicker使用最大和最小日期设置最大和最小时间

C# C datetimepicker使用最大和最小日期设置最大和最小时间,c#,winforms,datetimepicker,C#,Winforms,Datetimepicker,我在Winform应用程序中有一个datetimepicker控件。我想用最小日期和最大日期设置最小时间和最大时间。像每天上午9点到下午18点一样,应该是可选择的,datetimepicker只能在今天到15天后显示 baslangicDateTimePicker.Format = DateTimePickerFormat.Custom; baslangicDateTimePicker.CustomFormat = "dd/MM/yyyy hh tt"; baslangicDateTimePic

我在Winform应用程序中有一个datetimepicker控件。我想用最小日期和最大日期设置最小时间和最大时间。像每天上午9点到下午18点一样,应该是可选择的,datetimepicker只能在今天到15天后显示

baslangicDateTimePicker.Format = DateTimePickerFormat.Custom;
baslangicDateTimePicker.CustomFormat = "dd/MM/yyyy hh tt";
baslangicDateTimePicker.MinDate = DateTime.Now.AddDays(1).Date.AddHours(9);
baslangicDateTimePicker.MaxDate = DateTime.Now.AddDays(14).Date.AddHours(17);
我试过这样做,但它不适用于每天的最小和最大时间

 private void baslangicDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            if (baslangicDateTimePicker.Value.ToShortTimeString() == "18:00")
            {
                DateTime temp = baslangicDateTimePicker.Value.AddDays(1);
                if (temp >= baslangicDateTimePicker.MaxDate.Date)
                    baslangicDateTimePicker.Value.AddHours(-1);
                else
                    baslangicDateTimePicker.Value = temp.AddHours(-9);
            }
            if (baslangicDateTimePicker.Value.ToShortTimeString() == "08:00")
            {
                DateTime temp = baslangicDateTimePicker.Value.AddDays(-1);
                if (temp <= baslangicDateTimePicker.MinDate.Date)
                    baslangicDateTimePicker.Value.AddHours(1);
                else
                    baslangicDateTimePicker.Value = temp.AddHours(9);
            }
        }

这样解决了我的问题。它有点凌乱,写得不好,但很有效,可以给其他人提供意见。感谢Flydog57的建议。

请定义“不工作”。只有第一天从上午9点开始,最后一天从下午5点结束。我可以选择这两天之间的所有其他时间。我希望每天只能选择上午9点到下午5点之间的时间。您不需要DateTime。解析,将其与ToString一起删除,只需..=DateTime.Now.AddDays1.Date.AddHours9和…=DateTime.Now.adddays4.Date.addhours17您有几个问题。第一,不要转换为你立即解析的字符串。另一个是你设定的最小值是今天上午9点,最大值是15天后的下午5点。那不是你所描述的;明天早上1点是在最小值和最大值之间。控件似乎没有做你想做的事情。您可以使用自定义验证器执行某些操作,或者捕获表示值已更改的事件。