C# 是否从Winforms月历中获取所选月份?

C# 是否从Winforms月历中获取所选月份?,c#,winforms,C#,Winforms,我的表单上有一个MonthCalendar控件。我将其设置为一次选择一整周(从太阳到周六) 在控件顶部,用户可以选择月份。如何获取用户选择的月份?当一周包含两个不同月份的天数时,问题就会出现 例如,如果用户选择了2015年11月29日至2015年12月5日这一周,并且在控件中选择了11月份。他们也可以选择十二月,我不知道怎么说 用于选择周的代码(它不选择从星期日到星期六,但这是以后的问题): 谢谢 这将使用选择开始的月份。这是你想要的吗 private void monthCalenda

我的表单上有一个MonthCalendar控件。我将其设置为一次选择一整周(从太阳到周六)

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

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

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


谢谢

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

    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应该满足您的要求

编辑2:

也许你想把所有的东西都放在一个回调里?这是我的完整代码。它不会出故障

(尽管当您按下鼠标时,
monthCalendar1\u DateChanged
可能会被多次调用。最后一次调用它将为您提供正确的月份)


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

    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应该满足您的要求

编辑2:

也许你想把所有的东西都放在一个回调里?这是我的完整代码。它不会出故障

(尽管当您按下鼠标时,
monthCalendar1\u DateChanged
可能会被多次调用。最后一次调用它将为您提供正确的月份)


问题是,如果12月是所选月份,则从太阳到周六的12月第一周在11月有天。使用Start表示所选月份为11月。结束也是一样,我明白你的意思。我和MonthCalendar玩了一会儿,发现了一个模式。如果我从左向右拖动选择,日历将滚动到下个月,如果我选择该月的最后一周。。。如果你提供一些如何选择的代码,也许我们可以从那里开始工作。编辑我的帖子以包含该代码-选择由用户单击任意一天完成,它将选择从太阳到周六的那一周。选择必须始终按周进行。你是对的,但不幸的是,自动月份切换会随着每次选择的更改而反复调用自己,因此即使选择了一整周的天数,它也会出现故障并停留在当前月份。我尝试将代码添加到DateChanged、DateSelected和MouseDown。总是一样的小毛病。我在答案中添加了完整的代码。试一试:)问题是,如果12月是选定的月份,那么从太阳到周六的12月的第一周在11月有几天。使用Start表示所选月份为11月。结束也是一样,我明白你的意思。我和MonthCalendar玩了一会儿,发现了一个模式。如果我从左向右拖动选择,日历将滚动到下个月,如果我选择该月的最后一周。。。如果你提供一些如何选择的代码,也许我们可以从那里开始工作。编辑我的帖子以包含该代码-选择由用户单击任意一天完成,它将选择从太阳到周六的那一周。选择必须始终按周进行。你是对的,但不幸的是,自动月份切换会随着每次选择的更改而反复调用自己,因此即使选择了一整周的天数,它也会出现故障并停留在当前月份。我尝试将代码添加到DateChanged、DateSelected和MouseDown。总是一样的小毛病。我在答案中添加了完整的代码。试试看:)
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);
    }
}