C# 10x10 Feld und Dynamisch malen

Nick_SMI

Ensign
Registriert
Sep. 2015
Beiträge
153
Hallo zusammen!

Ich programmiere zur Zeit ein Programm, dass hat momentan 10x10 Felder, also 100 "Rectangles"...
Jeder dieser heißt immer A1-A10, B1-10, C1-C10 usw... (bis einschl. J)

Nun, ich möchte, wenn man Beispielsweise A1 anklickt, dass sich dann A1 - bis einschl. A4 färben, dazu habe ich schon folgenden Code, doch dort färbt sich nur A1, und ich weiß net, warum :)

Code:
private void Feld_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    string Name = ((Rectangle)sender).Name; //Feldname

    string IndexDesFelds = Name.Substring(1);
    string BuchstabeDesFeld = Name.Substring(0, 1);

    for(int i = 0; i <= groesseSchiff; i++)
    {
        Rectangle rectangle = sender as Rectangle;
        rectangle.Name = BuchstabeDesFeld + (Convert.ToUInt32(IndexDesFelds) + i);
        var converter = new System.Windows.Media.BrushConverter();
        var brush = (Brush)converter.ConvertFromString("#FF295080");
        rectangle.Fill = brush;
    }
}


Hoffe, dass ihr mir weiterhelfen könnt...
Danke im Voraus! :)
 
Na weil du immer das gleiche Rechteck umbenennst und dann einfärbst.

Dein Code wird auch Cast bzw. NullReferenceExceptions werfen, sobald du was anderes, als die Rechtecke anklickst!
 
Danke für deine Antwort....

Wie kann ich das denn ändern? ^^
 
Du benutzt immer nur ein Rectangle, nämlich das, auf das geklickt wurde (sender).

Das hier:
Code:
   rectangle.Name = BuchstabeDesFeld + (Convert.ToUInt32(IndexDesFelds) + i);

Macht nicht das, was du dir (vermutlich) gedacht hast. Du setzt den Namen des Rectangles neu, das wars dann aber auch schon. Du wolltest vermutlich einfach das nächste Rechteck setzen.

Lösung: Alle Rectangles in ein 10x10 Array, dann die Position des Senders bestimmen und von dort an über das Array iterieren (Grenzen beachten)
 
Okay, den Fehler sehe ich nun auch :D

Aber ist es nicht möglich, dies einfacherer zu ändern?
Also dass ich sozusagen auf ein Rectangle zugreife, dass so heißt?
 
Entweder die Rechtecke dynamisch erstellen und in einem Dictionary ablegen, oder die Rechtecke mit Control.ControlCollection.Find suchen.

Code:
this.Controls.Find(BuchstabeDesFeld + (Convert.ToUInt32(IndexDesFelds) + i), true);

EDIT:
Gilt für WinForms für WPF FrameworkElement.FindName benutzen.
 
Zuletzt bearbeitet:
Lösung:
Code:
var rectangle = FindName(BuchstabeDesFeld + (Convert.ToUInt32(IndexDesFelds) + i)) as Rectangle;

Danke an alle Helfer! :)
 
Zuletzt bearbeitet:
Zurück
Oben