如何从日历中删除所有面板?

时间:2017-01-26 08:16:36

标签: c# calendar

我正在使用C#编写日历。 如果我调用我的日历,它会创建与当前月份相同的面板数。但是,如果我想将当前月份增加一个,那么本月的面板就会非常稳固。 因此,我必须在更改月份后立即删除所有面板。 但是在这种情况下我该怎么做呢?

感谢您的帮助。

代码电影: 首先,我调用createPanel方法,为当前月份创建面板。 接下来,如果我单击MonthAdd方法,我想删除所有创建的面板。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Globalization;



namespace Einteilungs_Plan
{

public partial class Kalender : Form
{
    public DateTime TodayDate { get; set; }

    int counting = 0;

    public Kalender()
    {
        InitializeComponent();

        //Kalenderwochen initialisieren
        monat(counting);
        createPanel(true);


    }




    public string monat(int adding)
    {
        string monat = DateTime.Now.AddMonths(adding).ToString("MMMM");
        tbMonat.Text = monat;
        return monat;
    }

    private void btnAddMonth_Click(object sender, EventArgs e)
    {


        counting++;



        if(counting < 12)
        {
            monat(counting);
            switch (counting)
            {
                case 0:
                    int number = 10;
                    break;

                case 1:

                    break;

                default:
                    break;

            }
        }
        else
        {
            counting--;
        }
    }


    private void btnRemoveMonth_Click(object sender, EventArgs e)
    {


        counting--;
        if (counting > -1)
        {
            monat(counting);
        }
        else
        {
            counting++;
        }
    }

    public void createPanel(bool remove)
    {

        var numDays = DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month);

            int locationX = 12;
            int locationY = 74;

            for (int i = 0; i <= numDays; i++)
            {
                //Create Panel
                Panel test = new Panel();
                //Fill Panel
                test.Name = "panel" + i;
                test.Width = 200;
                test.Height = 100;
                test.BackColor = Color.White;
                test.Location = new System.Drawing.Point(locationX, locationY);
                this.Controls.Add(test);
                test.Show();
                if(i == 6 || i == 13 || i == 20 || i == 28)
                {
                    locationY += 106;
                    locationX = -194;
                }
                locationX += 206;

            }
    }



    public void Kalender_Shown(object sender, EventArgs e)
    {


    }

    private void Kalender_Load(object sender, EventArgs e)
    {

    }

    private void btnNeuerEintrag_Click(object sender, EventArgs e)
    {

        Formular formular = new Formular();
        formular.Show();
        formular.Focus();

    }

    private void btnHinzufügen_Click(object sender, EventArgs e)
    {
        Formular formular = new Formular();
        formular.Show();
        formular.Focus();
    }


}

}

2 个答案:

答案 0 :(得分:1)

       ...
        for (int i = 0; i <= numDays; i++)
        {
                //Create Panel
                test[i] = new Panel(); 
        }

        ...

然后

            this.Control.Remove(test[i]);

答案 1 :(得分:0)

我不确定我是否感觉不好你,但我想到的第一个简单的解决方案就是创建面板时你可以将它们保存在某些列表中,例如在生成新月之前你可以调用

 foreach (var p in panels)
            this.Controls.Remove(p);