我的表单上有MonthCalendar控件。我已经设置它,以便一次选择一整周(从太阳到周六)。
在控件的顶部,用户可以选择一个月。如何获取用户选择的月份?当有一个星期包含两个不同月份的天数时,问题就会增加。
E.g。如果用户选择2015年11月29日至2015年12月5日的周,并且在控件中选择了11月。他们也可以选择12月份,但我不知道怎么说。
选择周的代码(它不会从周日到周六进行选择,但以后会出现问题):
int i = (int)MonthView1.SelectionStart.DayOfWeek;
Date d = MonthView1.SelectionStart;
MonthView1.SelectionStart = d.AddDays(1 - i);
MonthView1.SelectionEnd = d.AddDays(7 - i);
谢谢!
答案 0 :(得分:4)
这将使用选择开始的月份。这是你想要的吗?
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
DateTime d = monthCalendar1.SelectionRange.Start;
Console.WriteLine(d.Month.ToString());
}
如果使用start不是您想要的,可以轻松将其更改为monthCalendar1.SelectionRange.End
。
编辑:
将您的选择代码放入MouseDown事件中,我注意到小选择(虚线)框将始终在星期一,这也是选择的开始。这意味着如果星期一位于上个月,则monthCalender将滚动到上个月。因此,使用monthCalendar1.SelectionRange.Start
应该满足您的要求。
EDIT2:
也许你试图将所有内容都放在1回调中?这是我的完整代码。它不会出现故障。
(虽然当您按下鼠标时可能会多次调用monthCalendar1_DateChanged
。调用它的最后时间将为您提供正确的月份)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.monthCalendar1.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateChanged);
this.monthCalendar1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.monthCalendar1_MouseDown);
}
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
DateTime d = monthCalendar1.SelectionRange.Start;
Console.WriteLine(d.Month.ToString()); //Get the month selected.
}
private void monthCalendar1_MouseDown(object sender, MouseEventArgs e)
{
int i = (int)monthCalendar1.SelectionStart.DayOfWeek;
DateTime d = monthCalendar1.SelectionStart;
monthCalendar1.SelectionStart = d.AddDays(1 - i);
monthCalendar1.SelectionEnd = d.AddDays(7 - i);
}
}