听起来您想要做的是设置属性Calendar.SelectedDate 和Calendar.VisibleDate。
我不确定您的确切目标是什么,因为我不知道用户将选择您的 1 月 1 日/6 月 1 日日期的控制类型,或者第三个星期日与此有什么关系。只有一个日历吗?如果以下信息对您没有帮助,请再解释一下。
我将从我的一个应用程序中粘贴一些 VB 代码,希望对您有所帮助。
Protected Sub calArrival_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles calArrival.SelectionChanged
SetFormDepartureEntry()
lblArrivalDate.Text = calArrival.SelectedDate.ToLongDateString
calDeparture.SelectedDate = calArrival.SelectedDate
calDeparture.VisibleDate = calArrival.SelectedDate
dtSelectedArrival = "1/1/2000"
'Determine if we need to see 2 months to view all possible departure dates.
If (DatePart(DateInterval.Month, calDeparture.SelectedDate) <> _
DatePart(DateInterval.Month, DateAdd(DateInterval.Day, 14, calDeparture.SelectedDate))) Then
calDeparture2.Visible = True
calDeparture2.SelectedDate = Nothing
calDeparture2.VisibleDate = DateAdd(DateInterval.Month, 1, calDeparture.SelectedDate)
Else
calDeparture2.Visible = False
End If
End Sub
好的,既然您已经发布了详细信息,这将成为一个不同的问题。您不知道需要多少个日历,因此您可能希望在代码中创建它们。我建议在您的标记中使用 Panel 控件来包含所有可能的结果日历。然后按照您之前的建议,根据需要创建新的日历对象并将它们添加到“锚”面板的控件集合中。
Calendar objCal = new Calendar();
pnlResultsContainer.Controls.Add(objCal);
就设置选定的日子而言,我相信每个日历只能有一个“选定”的日子。但是,您可以通过处理 Calendar.DayRender 事件来设置渲染样式,以及是否启用日期等。也许有人可以帮助我在 C# 中为动态创建的控件设置处理程序?我认为是这样的:
objCal.DayRender += AddressOf(DynamicDayRenderHandler());
如果这不正确,请更正。
确定在处理程序中设置样式的正确日期将是针对作为事件参数的 DayRenderEventArgs.Day 对象进行编码的问题。我不知道如何找到您正在寻找的特定日期/间隔,但应该可以通过以下文章中的一些研究:
How to: Customize Individual Days in a Calendar Web Server Control
DayRenderEventArgs.Day Property
希望这会有所帮助。