Program wyświetlający dzień poprzedni, bieżący oraz następny.

0

Witam,

Mam problem z programem mianowicie jak wracam do dnia bieżącego i naciskam na dzień poprzedni bądź następny nie pokazuje mi prawidłowego dnia tygodnia.

 

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

namespace Zadd
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    static DateTime Dzisiaj = DateTime.Now;
    public int Dzien = (int)Dzisiaj.DayOfWeek;
    

    string DzienTygodnia(int NumerDnia)
    {
        switch (NumerDnia)
        {
            case 0:
                return "Niedziela";
            case 1:
                return "Poniedziałek";
            case 2:
                return "Wtorek";
            case 3:
                return "Środa";
            case 4:
                return "Czwartek";
            case 5:
                return "Piątek";
            case 6:
                return "Sobota";
            case 7:
                return "Niedziela";
            case 8:
                return "Poniedziałek";
            default:
                return "Błąd";
        }
   }
    
    private void button2_Click(object sender, EventArgs e)
    {
        int Reset;
        DateTime dzisiaj = DateTime.Now; 
        Reset = (int)Dzisiaj.DayOfWeek;
        

        button1.Enabled = true;
        button3.Enabled = true;

        label1.Text = "Dzisiaj: " + DzienTygodnia(Reset);
        label2.Text = "Jutro: " + DzienTygodnia(Reset + 1);
        label3.Text = "Wczoraj: " + DzienTygodnia(Reset - 1);

    }

    private void button3_Click(object sender, EventArgs e)
    {

        Dzien++;
        
        if (Dzien > 7) Dzien = 1;     
        label1.Text = "Dzisiaj: " + DzienTygodnia(Dzien);
        label2.Text = "Jutro: " + DzienTygodnia(Dzien +  1);
        label3.Text = "Wczoraj: " + DzienTygodnia(Dzien - 1);
    }

    private void button1_Click(object sender, EventArgs e)
    {

        Dzien--

;
if (Dzien < 1) Dzien = 7;
label1.Text = "Dzisiaj: " + DzienTygodnia(Dzien);
label2.Text = "Jutro: " + DzienTygodnia(Dzien + 1);
label3.Text = "Wczoraj: " + DzienTygodnia(Dzien - 1);

    }
    private void Form1_Shown(object sender, EventArgs e)
    {
        this.timer1.Interval = 1000;
        this.timer1.Enabled = true;
        Text = System.DateTime.Now.ToString("yyyy.MM.dd" + " " + "HH:mm:ss");
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        Text = System.DateTime.Now.ToString("yyyy.MM.dd" + " " + "HH:mm:ss");
    }      
}

}

 
0
dzisiaj = DateTime.Now; 
wczoraj = DateTime.Now.Add(-1);
jutro = DateTime.Now.Add(1); 

wyświetlasz np.

jutro.DayOfWeek

To tak na początek.

1

W handlerze od buttona dzisiejszego

 DateTime dzisiaj = DateTime.Now;
            Dzien =(int)Dzisiaj.DayOfWeek;


            button1.Enabled = true;
            button3.Enabled = true;

            label1.Text = "Dzisiaj: " + DzienTygodnia(Dzien);
            label2.Text = "Jutro: " + DzienTygodnia(Dzien + 1);
            label3.Text = "Wczoraj: " + DzienTygodnia(Dzien - 1);
0

Dzięki wielkie za szybką odpowiedź :)

1

A to co?:

case 8:
   return "Poniedziałek";

Zamiast tego powinieneś zrobić NumerDnia %= 7 przed switch

PS. Wg. konwencji zmienne lokalne i parametry nazywamy w C# z małej litery
PS2. Możesz zastosować tablicę:

public string[] Dni = { "Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota" };

Dzięki czemu Twoja metoda wyglądać by mogła tak:

string DzienTygodnia(int numerDnia)
{
   return Dni[numerDnia % 7];
}

Według mnie tak jest lepiej

1

przy modulo uwazaj na liczby ujemne, bo moga nie dzialac tak jak chcesz. Generalnie zamiast -1 lepiej zrobic +6

2

Żadne switche ani tablice pomocnicze nie są potrzebne, wystarczy:

dateTime.ToString("dddd")

A nazwy wszystkich dni tygodnia siedzą sobie grzecznie w tablicy:

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames

(Oczywiście, język zależy od ustawień komputera.)

1 użytkowników online, w tym zalogowanych: 0, gości: 1