Graphisches Feld zeichnen C#

Gast #4665861
Lesenswert?

Hallo,
ich möchte in Visualstudio ein WPF-Projekt in C# erstellen. Das ganze 
soll später ein Zellulärer Automat werden.
Zunächst wollte ich ein RasterFeld erstellen. Das funktioniert auch, 
aber ich bekomme ein Merkwürdiges Verhalten.
1
 private void timer_tick(object sender, EventArgs e)
2
        {
3
            ZA_Field_Copy = ZA_Field;
4
            uint k = 2;
5
            uint l = 2;
6
            ZA_Field[k, l] = 0; // Um diese Zeile geht es
7
            //ZA_Field_Copy[k, l] = 0; 
8
            ZA_Field = ZA_Field_Copy; 
9
            redraw();
10
        }
11
        
12

13

14

15
        private void redraw()
16
        {
17
            int nr = 0;
18
            for (int k = 0; k < ZA_Field_y; k++)
19
            {
20
                for (int l = 0; l < ZA_Field_x; l++)
21
                {
22
                    nr = k * ZA_Field_y + l;
23
                    if (ZA_Field[k,l] == 1)
24
                    {
25
                        _rectangles[nr].Fill = Brushes.Black;
26
                    }
27
                    else
28
                    {
29
                        _rectangles[nr].Fill = Brushes.Azure;
30
                    }
31

32
                    myCanvas.Children.Remove(_rectangles[nr]);
33
                    myCanvas.Children.Add(_rectangles[nr]);
34
                }
35
            }
36
        }


Das Feld an sich ist 5x5 Felder groß und ist an den plätzen 
[2,1][2,1][2,3] schwarz markiert.
Kommentiere ich den Befehl ZA_Field[k, l] = 0; aus, so wird das Feld 
nach dem Zeittick so gezeichnet. Nehme ich die Zeile ZA_Field_Copy[k, l] 
= 0; rein, so wird das erste Feld leer dargestellt (damit habe ich 
getestet, ob das Feld komplett kopiert wird.
Nehme ich jetzt aber nur die Zeile ZA_Field[k, l] = 0; rein, bleibt das 
Feld leer, obwohl ich danach wieder ZA_Field_Copy nehme.
das kann ich leider gar nicht verstehen und hänge auch schon länger 
davor. Daher hoffe ich hier einen hinweis zu bekommen.

Mark
Gast #4666019
Lesenswert?

Hallo Mark,

wenn ich dich richtig verstehe, hast Du es hier mit einem 
"Zeiger"-Problem zu tun. Die Zeile
1
ZA_Field_Copy = ZA_Field;
erstellt keine Kopie des Array.

Die Variablen ZA_Field und ZA_Field_Copy kannst Du dir wie klassische 
Zeiger in C vorstellen. Beide zeigen auf ein Array im Speicher. Bei 
Deiner Zuweisung aber immer auf dasselbe Array.

Um ein Array tatsächlich zu kopieren, musst Du die CopyTo()-Methode 
benutzen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren