从 Winforms 月历中获取选定的月份?
Posted
技术标签:
【中文标题】从 Winforms 月历中获取选定的月份?【英文标题】:Get selected month from Winforms month calendar? 【发布时间】:2015-12-01 03:20:27 【问题描述】:我的表单上有一个 MonthCalendar 控件。我已将其设置为一次选择一整周(从周日到周六)。
在控件的顶部,用户可以选择月份。如何获取用户选择的月份?当一个星期包含两个不同月份的几天时,问题就会出现。
例如如果用户选择 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】:这将使用选择开始的月份。这是你想要的吗?
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:
也许您试图将所有内容都放在 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);
【讨论】:
这个问题是,如果 12 月是选定的月份,那么从太阳到星期六的 12 月的第一周在 11 月有几天。使用 Start 会说所选月份是 11 月。 End 也是如此。 我明白你的意思。我玩弄了 MonthCalendar 并注意到了一个模式。如果我通过从左到右拖动来选择,如果我选择当月的最后一周,日历将滚动到下个月...如果您提供一些如何选择的代码,也许我们可以从那里开始工作。 编辑了我的帖子以包含该代码 - 选择是通过用户单击任何一天完成的,它将选择从周日到周六的那一周。选择必须始终按周进行。 你是对的,但不幸的是,自动月份切换会随着每次选择的更改而一遍又一遍地调用,因此即使选择了整整一周以及另一个月份的几天,它也会出现故障并停留在当月。我尝试将我的代码添加到 DateChanged、DateSelected 和 MouseDown。总是同样的故障。 我已经在我的答案中添加了完整的代码。试一试:)以上是关于从 Winforms 月历中获取选定的月份?的主要内容,如果未能解决你的问题,请参考以下文章