Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.10.2011, 09:34

Kalender Jahresansicht

Hallo,

ich bekomme es einfach nicht hin, dass die Buttons in meinem Kalender richtig angezeigt werden. Kann mal jmd drüber schauen und mir sagen, wo mein Fehler liegt? (siehe Anhang),

DANKE

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private void Refresh()
    {      
        grd_btns.Children.Remove(mon);
        mon = new TextBlock();
        mon.Text = MonthToString(dat)+" "+dat.Year.ToString();
        //grd_btns.Children.Add(mon);
        Grid.SetColumn(mon, 1);
        mon.HorizontalAlignment = HorizontalAlignment.Center;
        mon.VerticalAlignment = VerticalAlignment.Center;
     
        int max = GetDaysOfMonth(dat);
        grd_btns.Children.RemoveRange(31, max);
        int k = (int)dat.DayOfWeek;
        if (k == 0)
            k = 31;
        k = 1;

        GenerateButtons(k, max);
    }

   private void GenerateButtons(int k, int max)
    {
        Button[] btns = new Button[365];
        
            for (int i = 0; i <= 12; ++i)
            {
                for (int j = 1; j < 31; ++j)
                {
                    Button btn = new Button();
                    btn.Content = (i * 31) + j + 1;
                    grd_btns.Children.Add(btn);
                    Grid.SetRow(btn, i);
                    Grid.SetColumn(btn, j);
                
                }
            }
        }
»nici« hat folgendes Bild angehängt:
  • Kalender2.jpg

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

27.10.2011, 12:31

wie würde es denn aussehen, wenn es richtig wäre?
ich kann nicht erkennen, was für dich nciht richtig erscheint...

das einzige, was mir spontan auffällt:

C#-Quelltext

1
for (int j = 1; j < 31; ++j)

du willst also alle Zahlen von 1 bis 30 durchgehen? was ist mit der 31?

C#-Quelltext

1
btn.Content = (i * 31) + j + 1;

warum zählst du dort nochmal 1 dazu?
aufgrund von j ist die Zählung schon mit 1 beginnend...

und warum schreibst du ++i und ++j?
i++ und j++ sind doch viel schöner ;)
(das macht meines Wissens in dem Fall keinen Unterschied, weshalb du auch ruhig bei der dir gewohnten Schreibweise bleiben kannst)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

3

27.10.2011, 15:34

hmm naja es fängt nicht mit der 1 an. wenn ich j = 0 schreibe, dann bedecken die Buttons die Monate.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

27.10.2011, 15:52

folgender Tipp müsste dir eigentlich ausreichend helfen:
du benutzt die Variable j an 2 Stellen innerhalb der beiden geschachtelten Schleifen
finde diese beiden und schau dir an, was passiert, wenn du j mit 0 initialisierst und was passiert, wenn du j mit 1 initialisierst
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

27.10.2011, 15:53

Und was ist mit Februar und Schaltjahren?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

27.10.2011, 16:01

Und was ist mit Februar und Schaltjahren?

ja, das muss alles noch berücksichtigt werden
allerdings ist der Kalender erst im Aufbau weshalb noch jeder Monat 31 Tage hat (denke ich mir zumindest ^^)

warum werden die Tage eigentlich dynamisch platziert?
eigentlich würde es reichen, alle Tage vorsorglich zu platzieren und lediglich den 29. Februar auszublenden, wenn er nicht benötigt wird

außerdem würde es reichen, wenn die Monate ohne angabe des Jahres da stehen würden, da das Jahr auch darüber stehen kann
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

7

27.10.2011, 16:25

Also wenn ich j = 0 nehme, dann fangen die Buttons auch mit der 1 an, verdecken aber dabei die Monate.

die Monate rechne ich mir so aus:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 private static int GetDaysOfMonth(DateTime date)
        {
            switch ((int)date.Month)
            {
                case 1: return 31;
                case 2:
                    if (date.Year % 4 != 0) return 28;
                    else                    return 29;
                case 3: return 31;
                case 4: return 30;
                case 5: return 31;
                case 6: return 30;
                case 7: return 31;
                case 8: return 31;
                case 9: return 30;
                case 10: return 31;
                case 11: return 30;
                case 12: return 31;
                default: throw new ArgumentOutOfRangeException("(int)<Instanzname>.Month muss zwischen 1 und 12 liegen.");
            }
        }

8

27.10.2011, 16:30

wenn ich diese Methode benutze

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 private void GenerateButtons(int k, int max)
        {
            int cou = 0;    
            for (int i = 0; i < 12 && cou < max; ++i)
            {
                for (int j = 0; (j + k) < 32 && cou < max; ++j)
                {
                    Button btn = new Button();
                    btn.Content = cou + 1;
                    grd_btns.Children.Add(btn);
                    Grid.SetRow(btn, (i + 1));
                    Grid.SetColumn(btn, j + k);
                    cou++;
                }
                k = 0;
            }


dann werden nur Buttons für den Januar erzeugt

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

27.10.2011, 16:34

das hast du schon richtig beobachtet, aber guck in der schleife nach, warum das so ist
ich will dir die lösung nicht einfach nennen, da das ein sehr einfacher fehler ist, der einem häufiger passieren kann und von einem schnell gefunden werden sollte
um zur lösung zu kommen, solltest du gucken, an welcher stelle du die buttons platzierst, da sie dort über die monate gelegt werden
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

10

27.10.2011, 21:13

die Monate rechne ich mir so aus:


Les dir nochmal durch, wann ein Jahr ein Schaltjahr ist... es sind nämlich nicht alle 4 Jahre ein Schaltjahr...

Werbeanzeige