从Winforms月历中获取选定的月份?

时间:2015-12-01 03:20:28

标签: c# winforms

我的表单上有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);

谢谢!

1 个答案:

答案 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);
    }
}