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

Kin*_*Dan 1 c# winforms

我的窗体上有一个 MonthCalendar 控件。我已将其设置为一次选择一整周(从周日到周六)。

在控件的顶部,用户可以选择月份。如何获取用户选择的月份?当一周包含两个不同月份的日子时,问题就会出现。

例如,如果用户选择2015年11月29日至2015年12月5日这一周,并在控件中选择11月。他们也可以选择十二月,我不知道如何判断。

选择周的代码(它不选择从周日到周六,但这是以后的问题):

int i = (int)MonthView1.SelectionStart.DayOfWeek;
Date d = MonthView1.SelectionStart;
MonthView1.SelectionStart = d.AddDays(1 - i);
MonthView1.SelectionEnd = d.AddDays(7 - i);
Run Code Online (Sandbox Code Playgroud)

谢谢!

int*_*ind 5

这将使用选择开始的月份。这是你想要的吗?

    private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
    {
        DateTime d = monthCalendar1.SelectionRange.Start;
        Console.WriteLine(d.Month.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

monthCalendar1.SelectionRange.End如果您不想要使用启动,您可以轻松地将其更改为。

编辑:

将您的选择代码放入 MouseDown 事件中,我注意到小选择(虚线)框将始终在星期一,这也是选择的开始。这意味着如果星期一位于上个月,monthCalender 将滚动到上个月。因此使用monthCalendar1.SelectionRange.Start应该满足您的要求。

编辑2:

也许您尝试将所有内容放入 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);
    }
}
Run Code Online (Sandbox Code Playgroud)