1

私はすぐにタイムテーブルに発展する小さなプログラムを作成していて、C#を使用して練習していMonthCalendarます。これまで、選択した日付をテキストラベルに表示することができましたが、少し違うことを達成しようと思っています。これは苦労しています。

フォームに7つのラベルを配置しました。日付をクリックすると、選択した日付が配置されている特定の週に対応する日付が7つのラベルすべてに表示されます。誰かがこれを達成するために私がする必要があることを提案できますか?

解決したい問題:カレンダーから日付を選択するとします。例:1013年1月22日など、ラベルに2012年1月21日から27日までのその週のすべての日付を表示したい

これをさらに明確にするには:

これは私が思いついたインターフェースです: ここに画像の説明を入力してください

そして私がこれまでに持っているコード:

 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();
    }
}
4

2 に答える 2

2

まず、週の最初の日を見つけます。これと同じように行うことができます。次に、この日付から、ターゲットテキストを各ラベルに割り当てます。

後者は、ラベルごとに1つずつ、7行のコードで実行できます。または、フォーム初期化コードでラベルを配列に配置し、配列を反復処理することもできます。ラベルを配列に配置するには、7行が必要であることに注意してください。最後に、Form.ControlsまたはForm.FindControlを使用して、名前に基づいてループ内の7つのラベルすべてを検索できます。

于 2013-01-22T01:13:14.533 に答える
2

zespriの答えから、私はこの答えからこのアイデアを得ました。

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();
    }
}
于 2013-01-22T01:28:45.583 に答える