Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Punktfarbe der schon gesetzten Punkte darf sich nicht ändern.
Tommylik
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Löwenstadt

Themenstarter:

Punktfarbe der schon gesetzten Punkte darf sich nicht ändern.

beantworten | zitieren | melden

Hallo,

Ich habe folgenden Code:


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

namespace WindowsFormsApp9
{
    public partial class Form1 : Form
    {

        private List<Point> Markierung = new List<Point>();
                
        public Form1()
        {
            InitializeComponent();
         }
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Markierung.Add(new Point(e.X, e.Y));
            pictureBox1.Invalidate();
            
        }
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
                        
            foreach (Point Koordinate in Markierung)
                if (radioButton1.Checked)
                {
                    e.Graphics.FillRectangle(
                    Brushes.Red,
                    Koordinate.X, Koordinate.Y,
                    5, 5);
                }

                else if (radioButton2.Checked)
                {
                    e.Graphics.FillRectangle(
                   Brushes.Blue,
                   Koordinate.X, Koordinate.Y,
                   5, 5);
                }
                else if (radioButton3.Checked)
                {
                    e.Graphics.FillRectangle(
                   Brushes.Green,
                   Koordinate.X, Koordinate.Y,
                   5, 5);
                }
        }
       
    }
}

Auf der Form ist eine Picturebox und 3 Radiobutton.
Ich wähle einen Radiobutton an um die Farbe auszuwählen.
Wenn ich dann mit der Maus in die Box klicke werden mir Punkte
in der gewählten Farbe gezeichnet. Wähle ich eine andere Farbe aus
wird zwar die Farbe gewechselt aber die gesetzten Punkte in der ersten
Farbe werden auch in die neue Farbe umgeändert.

Ich bin mir fast sicher das es an der Foreach Schleife liegt.


foreach (Point Koordinate in Markierung)

Da ich nur ein "Point" habe für alle 3 Farben.

Oder liege ich falsch?

Könnt Ihr mir auf die Sprünge helfen.

Vielen Dank im voraus.

Mfg Tom
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

Du musst Dir halt für jeden Punkt merken, in welcher Farbe er gezeichnet werden soll - und zwar schon beim hinzufügen der Punkte.

Dafür eignet sich z.B. ein Dictionary<Point, Brush> oder ein Dictionary<Brush, List<Point>> statt der List<Point>.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Tommylik
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Löwenstadt

Themenstarter:

beantworten | zitieren | melden

Hallo MarsStein ,

Vielen Dank für deine Antwort.

Deinen Hinweis habe ich verstanden das jeder Punkt seine Farbe braucht.
Zitat
Dafür eignet sich z.B. ein Dictionary<Point, Brush> oder ein Dictionary<Brush, List<Point>> statt der List<Point>.

Wie rum ich das Dictionary nutzen sollte/muss weiß ich nicht.

Mein Problem ist das ich nicht weiß was Brush für ein Typ ist.

Das folgende Beispiel verstehe ich und kann auch einen Zusammenhang schaffen.

 Dictionary<Point, Room> world = new Dictionary<Point, Room>();

        world.Add(new Point(0, 0), new Room() { X = 0 });
        world.Add(new Point(2, 3), new Room() { X = 2 });

        Room room = world[new Point(2, 3)];
 


Bei meinen Schaffe ich das nicht. Und es gibt hauptsächlich nur Beispiele im I-Net für Konsole mit INT und String

Und keine Beispiele in Verbindung mit einer Form.

Das Beispiel von oben habe ich als Vorlage benutzt.

Ist überhaupt etwas richtig?



namespace WindowsFormsApp9
{
    public partial class Form1 : Form
    {
        //private List<Point> _points = new List<Point>();
        
        private Dictionary<Brush, List<Point>> farbe, markierung = new Dictionary<Brush, List<Point>>();
        
        public Form1()
        {
            InitializeComponent();
        }
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            markierung.Add(new Brush(farbe ????), new Point(e.X, e.Y));
            markierung.Add(new Brush(farbe), new Point(e.X, e.Y));
            markierung.Add(new Brush(farbe), new Point(e.X, e.Y));

            pictureBox1.Invalidate();
           
        }
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            foreach (KeyValuePair<Brush, List<Point>> p in markierung)
            {     
                if (radioButton1.Checked)
                {
                    e.Graphics.FillRectangle(
                farbe.Red,
                p.X, p.Y,
                5, 5);
                }
                
                else if (radioButton2.Checked)
                {
                     e.Graphics.FillRectangle(
                    farbe.Blue,
                    p.X, p.Y,
                    5, 5);
                }

                else if (radioButton3.Checked)
                {
                    e.Graphics.FillRectangle(
                    farbe.Green,
                    p.X, p.Y,
                    5, 5);
                }
            }

        }
    }
}


Vielen Dank nochmal für deine Antwort.

Mfg Tom
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

Zitat von Tommylik
Mein Problem ist das ich nicht weiß was Brush für ein Typ ist.
Google-Suche nach c# brush type
Zitat von Tommylik
Und keine Beispiele in Verbindung mit einer Form.
Ein Dictionary ist nicht abhängig von einer Form.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

Du mußt die Logik bzgl. der RadioButtons aus der Paint-Methode herausnehmen und in der MouseDown-Methode benutzen (wie MarsStein schon schrieb).
Am besten, du schreibst dir eine Methode dafür:


Brush GetCurrentBrush()
{
  if (radioButton1.Checked)
     return Brushes.Red;
  // ...
}
und benutzt diese dann zum Hinzufügen zu dem Dictionary.
Und in der Paint-Methode benutzt du nur noch das Dictioanary zum Zeichnen der Punkte.

PS: Warum hast du zwei Dictionary-Membervariablen und warum fügst du 3x den Punkt zum Dictionary hinzu?
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Es gibt mehrere Wege, zum Ziel zu kommen. Statt ein Dictionary zu verwenden, könnte man auch direkt in ein Bitmap (oder 2D-Array) zeichnen.

Die einfachste, aber auch die unperformanteste, Möglichkeit wäre, Linq zu verwenden, und einfach diese Zeile aus dem ersten Beitrag:

foreach (Point Koordinate in Markierung)

hiermit zu ersetzen:

foreach (Point Koordinate in Markierung.Reverse())

Dadurch werden die späteren Markierungen immer durch die zuerst gezeichneten ersetzt.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Tommylik
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Löwenstadt

Themenstarter:

beantworten | zitieren | melden

Hallo,

Vielen Dank für Eure Antworten.


@Abt
Zitat
Ein Dictionary ist nicht abhängig von einer Form.

Gut zu wissen da verschwende ich keine Zeit mehr
Vielen Dank


@TH69

Ich habe versucht deine Tipps umzusetzen.
Ich verstehe das Dictionary nicht in Verbindung mit Brush und List<Point>.

Da wo die ?? sind komme ich einfach nicht weiter.

Wegen der Zeile mit Foreach wo mir VS zum Glück kein Fehler mehr anzeigt
habe ich jetzt natürlich Probleme mit den Wörtern Koordinate.

Weil vorher war es so:

foreach (Point Koordinate in Markierung)

namespace WindowsFormsApp9
{
    public partial class Form1 : Form
    {

        private Dictionary<Brush, List<Point>> Markierung = new Dictionary<Brush, List<Point>>();

        public Form1()
        {
            InitializeComponent();
        }
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Brush GetCurrentBrush()
            {
                if (radioButton1.Checked)
                {
                    Markierung???(GetCurrentBrush, new Point(e.X, e.Y));
                }

                return Brushes.Red;
               
            }

            pictureBox1.Invalidate();

        }
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {

            foreach (KeyValuePair<Brush, List<Point>> listeKeyValuePair in Markierung)

                e.Graphics.FillRectangle(???? Koordinate.X, Koordinate.Y, 5, 5);

        }

    }
}


Zitat
PS: Warum hast du zwei Dictionary-Membervariablen..

Ist von meinem ausprobieren drin geblieben.
Zitat
und warum fügst du 3x den Punkt zum Dictionary hinzu?

1. weil ich nicht C# programmieren kann 2. weil ich drei verschiedene Farben wollte.

Schade das nicht einer von Euch in meinem Bekanntenkreis ist dann würde ich das einfacher lernen.

So mache ich das auch mit einem von meinem Kollegen mit der SPS.
Alles praktisch am PC zeigen und Erklären.

Und jetzt kommt er alleine klar.

Vielen Dank noch mal für Eure Hilfe.

Mfg Tom
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

du solltest versuchen die Typen die du verwendest zu verstehen.

Grundsätzlich:
Hast du ein Dictionary<Point, Brush> - dann hast du eine Liste von Points die jeweils mit einem Brush verknüpft ist.

Verwendung für Dictionar<Point, Brush>:

foreach(var entry in myDictionary)
{
var point = entry.Key;
var brush = entry.Value;
}

Hast du ein Dictionary<Brush, List<Point>> - dann hast du eine Liste von Brushes - jeder dieser Brushes - ist dann widerum mit einer Liste von Points verknüft.

Verwendung für Dictionary<Brush, List<Point>>:

foreach(var entry in myDictionary)
{
var brush = entry.Key;
foreach(var point in entry.Value)
{
// hier hast du in "point" wieder einen Point
}
}

Beides - hilft dir jedoch nicht wirklich, da du dein Grundproblem nicht verstanden hast:
Die Farbe deiner Punkte ändert sich nicht - du überzeichnest wahrscheinlich lediglich einen Punkt mit einem anderen - ergo - musst du die Reihenfolge der Zeichnung der Punkte ändern - nämlich indem du die zuletzt hinzugefügten Punkte zuerst - und die zuerst hinzugefügten Punkte zuletzt zeichnest.

Mein Tipp:
Verwende ein Dictionary<Point, Brush> (nicht Dictionary<Brush, List<Point>>)

Und innerhalb von "pictureBox1_Paint" - machst du (wie MrSparkle bereits empfahl) ein "Markierung.Reverse" um dein eigentliches Problem zu beheben.

LG
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am .
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Ich hab den Beitrag jetzt mal in das Grundlagen-Forum verschoben, denn es geht letztendlich wieder um die Verwendung von Listen und Dictionarys.

Listen und Dictionarys sind auch nicht C#-spezifisch sondern existieren in den meisten Programmiersprachen. Wenn man solche grundlegenden Dinge nicht versteht, kann man sie nachlesen. Wenn man sie nicht nachlesen will, hilft einem auch vorgefertigter Code nicht weiter.

[FAQ] Wie finde ich den Einstieg in C#?
[Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Und bitte beachte zukünftig [Hinweis] Wie poste ich richtig?, besonders Punkt 1.1 und 4.2
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Tommylik
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Löwenstadt

Themenstarter:

beantworten | zitieren | melden

Hallo,

Vielen Dank für Eure Antworten,


@MrSparkle

Ich dachte weil ich auf einer Form etwas mache gehört der Beitrag darein.

@Taipi88
Zitat
Grundsätzlich:
Hast du ein Dictionary<Point, Brush> - dann hast du eine Liste von Points die jeweils mit einem Brush verknüpft ist.

Das ist mal eine Art der Erklärung die ich etwas besser verstehe.
Zitat
musst du die Reihenfolge der Zeichnung der Punkte ändern - nämlich indem du die zuletzt hinzugefügten Punkte zuerst - und die zuerst hinzugefügten Punkte zuletzt zeichnest.

Damit hast du mich völlig irritiert und für das was ich möchte
aus meiner Sicht nicht logisch.

Weil:
1. Ich weiß nicht viele Punkte gesetzt werden. Mal 3 oder 7 oder 18. Situationsbedingt
2. Wo die Punkte gesetzt werden weiß ich auch nicht, irgendwo in der Picturebox.
3. Wann welche Farbe benötigt wird ist auch Situationsbedingt.

Vielleicht 2 Punkte rot und 6 Punkte grün
oder nur 1 Punkt Blau
oder 7 Punkte gelb und 4 Punkt braun

Der folgende Code (Meine Basis) würde theoretisch schon ausreichen.

Der Code wird gestartet und man kann mit der Maus in der Picturebox
wo man will Punkte setzen, zwar nur in rot aber so war das Konzept als Basis geplant.

Für mein Verständnis kann ich also nicht sagen welcher Punkt der letzte ist und
den muss ich dann als erstes setzen. (oder zeichnen)

public partial class Form1 : Form
    {

        private List<Point> Markierung = new List<Point>();

        public Form1()
        {
            InitializeComponent();
        }

        private void pictureBox2_MouseDown(object sender, MouseEventArgs e)
        {
            Markierung.Add(new Point(e.X, e.Y));
            pictureBox2.Invalidate();

        }

        private void pictureBox2_Paint(object sender, PaintEventArgs e)
        {
            foreach (Point Koordinate in Markierung)
            {
                e.Graphics.FillRectangle(Brushes.Red, Koordinate.X, Koordinate.Y, 5, 5);
            }
        }

    }

Als ich diese Basis hatte wollte ich nur noch den Code so abändern, das ich
bevor ich einen Punkte setze die Wahl habe die Farbe zu ändern. (z.B radioButton)
Zitat
Mein Tipp:
Verwende ein Dictionary<Point, Brush> (nicht Dictionary<Brush, List<Point>>)

Ich versuche immer Eure Tipps zu nutzen. Lese darüber und suche mir über Google
Code Beispiele. Da ich es nicht so wie Ihr gelernt habe ist es schwer.
Also muss ich ausprobieren was ich damit tun soll.
So wie der folgende Code. Ein Versuch mit den Tipps von Euch.
Wenn Ihr mir Tipps gebt dann habt Ihr schon die richtige Lösung im Kopf,
aber mich können die Tipps in eine falsche Richtung leiten.


public partial class Form1 : Form
    {
        Dictionary<Point, Brush> Markierung = new Dictionary<Point, Brush>();
        public Form1()
        {
            InitializeComponent();
        }

        Brush brush = Brushes.Black;
        
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            brush = Brushes.Red;
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            brush = Brushes.Green;
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            brush = Brushes.Blue;

        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            foreach (var entry in Markierung)
            {
                var point = entry.Key;
                var brush = entry.Value;
            }

            Markierung.Add(new Point(e.X, e.Y),brush);
            pictureBox1.Invalidate();

        }
        
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            
            foreach (Point Koordinate in Markierung.Reverse())
            {
                e.Graphics.FillRectangle(brush, Koordinate.X, Koordinate.Y, 5, 5);
            }
        }
 
    }

Ganz unten wird das foreach rot unterstrichen.
Ich glaube ich bin Nah dran, aber ich denke das ist eher Wunsch denken.

So vielen dank noch mal für Eure Hilfe.

Mfg Tom
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Tommylik am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1821
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Deine letzte foreach ist auch wieder auf dein Dictionary<Point, Brush> also musst du anstelle von Point ein KeyValue<Point, Brush> durchlaufen.
Und dann kriegst du deinen Point wieder über .Key zurück.

Musst nur deine Schleife in pictureBox1_MouseDown anschauen.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

Zitat von T-Virus
Musst nur deine Schleife in pictureBox1_MouseDown anschauen.
Welche dort sinnlos ist (weil sie nichts effektives macht).

Nach der Änderung sollte es dann funktionieren.

PS: Das Rückwärtsdurchlaufen mittels Reverse finde ich eher irritierend, denn m.E. sollten doch die Punkte in der angegebenen Reihenfolge gesetzt werden (also der zuletzt gesetzte Punkt auch als letztes, d.h. evtl. einen anderen Punkt übermalend, angezeigt werden).
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat von Tommylik
Ganz unten wird das foreach rot unterstrichen.

Es wird nicht nur rot unterstrichen, sondern auch eine Fehlermeldung vom Kompiler ausgegeben. Die ist relativ eindeutig. Und wenn du es nicht verstehst, dann solltest du halt doch mal in die Doku schauen. Dort steht alles, was du wissen mußt, und es gibt jede Menge Code-Beispiele. Dafür ist die Doku da!

Siehe auch: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Wozu du jetzt das Dictionary rückwärts durchlaufen willst, erschließt sich mir nicht. Mein Tip bezog sich doch eindeutig auf den Code in deinem ersten Beitrag, wo du eine Liste verwendest. Du mußt dort nur eine einzige Codezeile ersetzen, und die Punkte werden nicht mehr überzeichnet.

@Th69:
Zitat von Th69
PS: Das Rückwärtsdurchlaufen mittels Reverse finde ich eher irritierend, denn m.E. sollten doch die Punkte in der angegebenen Reihenfolge gesetzt werden (also der zuletzt gesetzte Punkt auch als letztes, d.h. evtl. einen anderen Punkt übermalend, angezeigt werden).

Was soll denn dort "übermalt" werden? Der Sinn des Dictionarys ist doch, daß es für jeden Punkt nur genau eine Farbe gibt. Das Rückwärtsdurchlaufen ist nicht irritierend sondern völlig überflüssig, zumal die Reihenfolge der Werte in einem Dictionary eh nicht definiert ist, siehe die Doku dazu:
Zitat
For purposes of enumeration, each item in the dictionary is treated as a KeyValuePair<TKey,TValue> structure representing a value and its key. The order in which the items are returned is undefined.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

Da jeweils ein 5x5 großes Rechteck pro Punkt gezeichnet wird, können ja mehrere Punkte (in verschiedenen) Farben nebeneinander gesetzt werden (und würden sich gegenseitig übermalen).
Und auch bei dem von dir gemeinten Code mit der Liste ist Reverse dann nicht sinnvoll.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Da hast du natürlich Recht. Bisher war immer nur von "Punkten" die Rede, daher habe ich das nicht in Betracht gezogen. Trotzdem ist die Reihenfolge der Werte in einem Dictionary nicht definiert, daher müßte man sie zuerst sortieren.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Tommylik
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Löwenstadt

Themenstarter:

beantworten | zitieren | melden

Hallo an alle,

Vielen Dank für Eure Antworten.

@MrSparkle
Zitat
Mein Tip bezog sich doch eindeutig auf den Code in deinem ersten Beitrag, wo du eine Liste verwendest. Du mußt dort nur eine einzige Codezeile ersetzen, und die Punkte werden nicht mehr überzeichnet.


Dein Tipp für den ersten Beitrag:
Zitat
Die einfachste, aber auch die unperformanteste, Möglichkeit wäre, Linq zu verwenden, und einfach diese Zeile aus dem ersten Beitrag:

C#-Code:
foreach (Point Koordinate in Markierung)

hiermit zu ersetzen:

C#-Code:
foreach (Point Koordinate in Markierung.Reverse())

Dadurch werden die späteren Markierungen immer durch die zuerst gezeichneten ersetzt.


Also so:
Mein Code aus dem ersten Beitrag mit der ausgetauschten Zeile.



    public partial class Form1 : Form
    {

        private List<Point> Markierung = new List<Point>();

        public Form1()
        {
            InitializeComponent();
        }
        private void pictureBox2_MouseDown(object sender, MouseEventArgs e)
        {
            Markierung.Add(new Point(e.X, e.Y));
            pictureBox2.Invalidate();

        }
        private void pictureBox2_Paint(object sender, PaintEventArgs e)
        {

            foreach (Point Koordinate in Markierung.Reverse())
                if (radioButton1.Checked)
                {
                    e.Graphics.FillRectangle(
                    Brushes.Red,
                    Koordinate.X, Koordinate.Y,
                    5, 5);
                }

                else if (radioButton2.Checked)
                {
                    e.Graphics.FillRectangle(
                   Brushes.Blue,
                   Koordinate.X, Koordinate.Y,
                   5, 5);
                }
                else if (radioButton3.Checked)
                {
                    e.Graphics.FillRectangle(
                   Brushes.Green,
                   Koordinate.X, Koordinate.Y,
                   5, 5);
                }
        }

    }
}

Dann wird das jetzt rot unterstrichen:


Markierung.Reverse()

eine foreach Anweisung kann nicht für variablen vom Typ void verwendet werden.

Zitat
Wozu du jetzt das Dictionary rückwärts durchlaufen willst, erschließt sich mir nicht.

Das beruht auch auf deinen ersten Tipp.
Von dir kommt der Tipp mit dem Reverse.

foreach (Point Koordinate in Markierung.Reverse())

Ich weiß schon gar nicht mehr was ich noch alles ausprobieren soll.
Ich habe schon 16 Projektmappen.

Vielen Dank für Eure Hilfe

Mfg Tom
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Es geht um diese Methode: Enumerable.Reverse. Schau in die Doku, dort gibt es ein Beispiel. Und wie du dort sehen kannst, liegt diese Methode im Namespace System.Linq. Den mußt du auch zu deinen zu deinen usings hinzufügen.
Zitat von Tommylik
Ich weiß schon gar nicht mehr was ich noch alles ausprobieren soll.
Ich habe schon 16 Projektmappen.

Das nützt auch nichts, wenn du nicht wenigstens versuchst, die Tips nachzuvollziehen, die dir hier gegeben werden.

[Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Und nochmal: [Hinweis] Wie poste ich richtig?, Punkt 1.1 Erst suchen und in die Doku schauen, dann posten!
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

So muß deine Methode aussehen (bezogen auf deinen 2. Code von gestern, 23:14h):


private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    foreach (var entry in Markierung)
    {
        var point = entry.Key;
        var brush = entry.Value;

        e.Graphics.FillRectangle(brush, point.X, point.Y, 5, 5);
     }
}
private Nachricht | Beiträge des Benutzers
Tommylik
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Löwenstadt

Themenstarter:

beantworten | zitieren | melden

Hallo,

@ Th69

Super vielen Dank funktioniert bestens.

@MrSparkle

System.Link war schon hinzugefügt. Die Methode habe ich mir auch angeschaut.

Dadurch habe ich folgendes erstellt.

private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {

            Point[] points = { };

            Point[] reversed = points.Reverse().ToArray();

            foreach (Point Koordinate in reversed)
            {
                e.Graphics.FillRectangle(brush, Koordinate.X, Koordinate.Y, 5, 5);

            }
        }

Jetzt ist zwar mein Code Fehlerfrei aber aber wenn ich mit der Maus Klicke passiert nichts.


Point[] points = { };

Ich bin mir sicher das das die Geschweifte Klammer daran Schuld ist.

Aber vielen Dank noch für Eure tolle Hilfe und Geduld mit mir.

Mfg Tom
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1821
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@Tommylik
Der Code macht weder Sinn noch kann er so irgendwas zeichnen.
Du machst auf dein leeres points Array ein Reverse() und dann ein ToArray() und willst diese dies neue leere Array durchlaufen um was zu zeichnen.

Da du immer wieder ein neues Array beim Paint Aufruf angelegt wird, macht der Code genau 0 Sinn und hat auch keine Funktion.
Wenn du die points nicht irgendwo außerhalb des Paint Events herholst, kannst du nie was zeichnen.

Du solltest dich dringend mal mit den Grundlagen von C# auseinander setzen.
Aktuell macht du irgendwas und wunderst dich, dass der Code nichts macht oder Fehler verursacht.
Hier solltest du dich dringend einarbeiten in die Grundlagen damit du überhaupt verstehst was du machst.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

Zitat von Tommylik
Jetzt ist zwar mein Code Fehlerfrei aber aber wenn ich mit der Maus Klicke passiert nichts.

Verwende den Debugger - dafür ist er da.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
private Nachricht | Beiträge des Benutzers