0

我是编程新手,不太确定自己在做什么。我正在尝试在 c# 中的 WindowsForm 中复制日历。我从 TableLayoutPanel(6x7) 开始。我在表格布局面板的每个单元格中添加了一个常规面板。在常规面板中,我有一个标签和一个列表框。我希望 int day 出现在标签中。我不想硬编码它。我希望在我下个月的时候标签能适当地改变。我怎样才能做到这一点?

这是布局的图片:

例子

所以我在一个小组中这样做,以下是我的一个队友想出的。它很好地填充了标签,但 2013 年 12 月和 2014 年 6 月除外。知道可能导致这种情况的原因吗?这是一种好的做事方式吗?

` private void dtpMonthTab_ValueChanged(object sender, EventArgs e)
    {
        this.setCal();
    }

    private void setCal()
    {


        DateTime now = dtpMonthTab.Value;
        int month = now.Month;
        int year = now.Year;
        DateTime startmonth = new DateTime(year, month, 1);


        DayOfWeek dow = startmonth.DayOfWeek;
        int daynumber = (int)dow;
        //MessageBox.Show(" testing: " + dow + daynumber);

        switch (daynumber)
        {
            case 0:
                //MessageBox.Show("The number is zero!");
                startmonth = startmonth.AddDays(-6);
                label1.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label2.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label3.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label4.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label5.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label6.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label7.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                break;
            case 1:
                //MessageBox.Show("The number is one!");
                startmonth = startmonth.AddDays(-1);
                label1.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label2.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label3.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label4.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label5.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label6.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label7.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                break;
            case 2:
                //MessageBox.Show("The number is 2!");
                startmonth = startmonth.AddDays(-2);
                label1.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label2.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label3.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label4.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label5.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label6.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label7.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                break;
            case 3:
                //MessageBox.Show("The number is 3!");
                startmonth = startmonth.AddDays(-3);
                label1.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label2.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label3.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label4.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label5.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label6.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label7.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                break;
            case 4:
                //MessageBox.Show("The number is 4!");
                startmonth = startmonth.AddDays(-4);
                label1.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label2.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label3.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label4.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label5.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label6.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label7.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                break;
            case 5:
                //MessageBox.Show("The number is 5!");
                startmonth = startmonth.AddDays(-5);
                label1.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label2.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label3.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label4.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label5.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label6.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label7.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                break;
            case 6:
                //MessageBox.Show("The number is 6!");
                startmonth = startmonth.AddDays(-6);
                label1.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label2.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label3.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label4.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label5.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label6.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                label7.Text = String.Format("{0:dd}", startmonth);
                startmonth = startmonth.AddDays(1);
                break;
            default:
                MessageBox.Show("I'm sorry, I don't understand that!");
                break;

        }

        label8.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label9.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label10.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label11.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label12.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label13.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label14.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label15.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label16.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label17.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label18.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label19.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label20.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label21.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label22.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label23.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label24.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label25.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label26.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label27.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label28.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label29.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label30.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label31.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label32.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label33.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label34.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label35.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label36.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label37.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label38.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label39.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label40.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label41.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);

        label42.Text = String.Format("{0:dd}", startmonth);
        startmonth = startmonth.AddDays(1);
    } ` 
4

1 回答 1

0

您可以使用TableLayoutPanel.GetControlFromPosition。一旦您将控件投射到您所知道的位置(您说的是“常规面板”)并相应地使用它。现在的问题是那些 Panel 项目没有公开它们的标签+列表框内容,但是Controls属性以某种方式公开了它们。我怀疑它Controls[0]总是会给出标签,并Controls[1]会给你列表框,但不确定。你将不得不施放它们。这取决于它们在每个单元格中创建的顺序。

你应该让你自己的用户控制,就像来自 Mr47 的评论一样。您的用户控件将是一个带有标签和列表框的面板,然后您必须用这个新的用户控件替换所有单元格中的所有面板。然后,您应该创建将公开标签和列表框的附加属性(标签和列表框)。这种方式编程会更容易,并且代码会更能抵抗错误。

另外,请注意,一个月的五行是不够的,例如,如果该月的第一天是星期六。

于 2013-10-21T15:42:00.487 回答