Forum: PC-Programmierung Graphisches Feld zeichnen C#


von Mark (Gast)


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

von Frank (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.