月历显示星期一至星期日的日期

时间:2013-01-22 00:33:41

标签: c# winforms visual-studio-2010 monthcalendar

我正在创建一个小程序,很快就会发展成一个时间表,我正在练习使用C#MonthCalendar。到目前为止,我已经设法将选定的日期显示在文本标签上,但是我希望看到一些稍微不同的东西,我正在努力。

我在表单上放了七个标签。当我点击日期时,我希望所有七个标签都填充与所选日期所在的特定周相对应的日期。任何人都可以建议我需要做些什么才能实现这一目标。

我想要解决的问题: 假设我从日历中选择了一个日期。 E.g 22/01/1013所以在标签上我想显示从2012年1月21日至27日开始的那一周的所有日期

进一步澄清:

这是我提出的界面: enter image description here

到目前为止我的代码:

 public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }
        private void button1_Click(object sender, EventArgs e)
        {
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        DateTime dt = DateTime.Now;
        label8.Text = dt.ToString();
    }

    private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
    {
        label1.Text = monthCalendar1.SelectionStart.ToString();
    }
}

2 个答案:

答案 0 :(得分:2)

首先,找出一周的第一天。你可以这样做this。然后从这个日期开始,将目标文本分配给每个标签。

您可以在7行代码中执行后者,每个标签对应一行,或者您可以将标签放在数组中,在表单初始化代码中并遍历数组。请注意,将标签放入数组仍需要7行。最后,您可以使用Form.ControlsForm.FindControl根据名称在循环中查找所有7个标签。

答案 1 :(得分:2)

zespri的回答中我得到了这个answer的想法。

class Program
{
    static void Main(string[] args)
    {
        DateTime t = DateTime.Now; //Your selected date from Calendar
        t -= new TimeSpan((int)t.DayOfWeek, 0, 0, 0);
        Console.WriteLine("\tstart: " + t.Date.ToShortDateString());
        Console.WriteLine("\tend: " + t.Date.AddDays(7).ToShortDateString());
        Console.WriteLine("\t" + new string('-', 25));

        for (int i = 0; i < 7; i++)
        {
            var d = t.AddDays(i);
            if (d.DayOfWeek >= DayOfWeek.Monday && d.DayOfWeek <= DayOfWeek.Friday) //Range: Monday to Friday
                Console.WriteLine(d.DayOfWeek + " : " + d);
        }
        Console.ReadLine();
    }
}