2017-01-26 9 views
2

私は現在C#でカレンダーをプログラミングしています。 私がカレンダーを呼び出すと、現在の月の日数と同じくらい多くのパネルが作成されます。しかし、現在の月を1つ増やしたい場合は、今月のパネルをそこに置いてください。 月を変更するとすぐにすべてのパネルを削除する必要があります。 しかし、私はこの場合どのようにすることができますか?カレンダーからすべてのパネルを削除するにはどうすればよいですか?

ありがとうございました。

コードeplain: まず、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(); 
    } 


} 

}

+0

createPanelメソッドのboolを無視するxD削除するのを忘れていた... –

答えて

0

私はあなたによくundestoodかはわからないが、私の心に来る最初の簡単なsolutionaは、あなたができるパネルを作成中ということですそれらをいくつかのリストに保管しておけば、新しい月を生成する前に電話することができます

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

ありがとう、論理的に聞こえる。しかし、今私はリストにすべてのプロパティを持つオブジェクトを格納する方法がわからないという問題があります。申し訳ありません、ちょうどC#でプログラミングを始めました:/ –

+0

あなたが作成した各パネルに、あなたの一日の内容がすべて含まれるものとします。あなたのループでは、各パネルpanels.Add(テスト)を追加します。あなたのリストに例えばリストパネル=新しいリスト();その内容のすべてを使ってそれぞれのパネルにアクセスすることができます –

+0

そのリスト内のパネルへの参照は、作成したものと同じです。 –

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

     ... 

、その後

  this.Control.Remove(test[i]); 
関連する問題