我的窗体上有一个 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)
谢谢!
这将使用选择开始的月份。这是你想要的吗?
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)
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |