Laden...

gleichen Steuerelementen unterschiedliche Farben zuordnen

Erstellt von Zwergi vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.816 Views
Z
Zwergi Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren
gleichen Steuerelementen unterschiedliche Farben zuordnen

Hallo liebe C# Community,

ich habe bereits viel informatives in diesem Chat gelernt.
Nun habe ich eine Frage.
Ich habe eigene Steuerelemente erstellt. Je nach Zustand, der im Hauptfenster festgelegt wird, ändert sich die Farbe des Steuerelementes.
Nun habe ich 2 Elemente in meiner Form vom Typ:Steuerelement_1_3 (siehe unten). Es ist also das gleiche Element sieht genauso aus, aber ich möchte farblich nur das eine ändern.
Also wenn ich im Hauptfenster den Status in 1 ändere und dann nur die das eine Element neu zeichnen lassen (invalidate), dann klappt es erstmal.
Aber: in meinem Programm werden die Elemente teilweise sichtbar und nicht sichtbar, somit wird auch das zweite Steuerelement vom Typ Steuerelement_1_3 neu gezeichnet. Es wird dann auch gelb. Logisch. Wie kann ich das Steuerelement_1_3 einmal mit status=grün und dann einmal für status=gelb ansprechen?
Muss ich zwei Steuerelemente anlegen?

In der Klasse:

  class Steuerelement_1_3 : Control
    {
        protected override void OnPaint(PaintEventArgs e)
        {
            var g = e.Graphics;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            var center = new Point(250, 250);
            var innerR = 130;
            var thickness = 110;
            var startAngle = 180;
            var arcLength = 180;
            var outerR = innerR + thickness;
            var outerRect = new Rectangle
                            (center.X - outerR, center.Y - outerR, 2 * outerR, 2 * outerR);
            var innerRect = new Rectangle
                            (center.X - innerR, center.Y - innerR, 2 * innerR, 2 * innerR);

            using (var p = new System.Drawing.Drawing2D.GraphicsPath())
            {
                p.AddArc(outerRect, startAngle, arcLength);
                p.AddArc(innerRect, startAngle + arcLength, -arcLength);
                p.CloseFigure();
                if (ZustandKenngroessen.zustand_prod_gesa_Nettogasbetriebsleistung == 0)
                { e.Graphics.FillPath(Brushes.Green, p); }
                else if (ZustandKenngroessen.zustand_prod_gesa_Nettogasbetriebsleistung == 1)
                { e.Graphics.FillPath(Brushes.Yellow, p); }
                else
                { e.Graphics.FillPath(Brushes.Red, p); }
                e.Graphics.DrawPath(Pens.Black, p);
            }
            string text = this.Text;
            SizeF textSize = g.MeasureString(text, this.Font);
            g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new PointF(this.Width / 2f - textSize.Width / 2f, (this.Height / 2f - textSize.Height / 2f)-25));

        }
    }

im Hauptfenster:


 ZustandKenngroessen.zustand = 1;
 Prod_Gesa_Nettogasbetriebsleistung.Invalidate();


damit wird es gelb.
Im Verlauf der Benutzung wird
Prod_Gesa_Eigenstrombedarf ebenfalls neu gezeichnet, ist auch von dem Steuerelement_1_3 aber soll grün bleiben.

Ich hoffe ich habe es ausreichend beschrieben.
DANKE!
Viele Grüße
Zwergi

2.298 Beiträge seit 2010
vor 5 Jahren

Erstens nutze bitte die Code Tags.

Ansonsten sieht es mir so aus als wäre Zustandskenngroessen eine Klasse mit statischen Membern. Gerade für deinen Fall ist das eine sehe schlechte Wahl.

Wieso legst du in deinem steuerelement nicht einfach Properties für die Zustände an? Bei Änderung eines Zustands im Form, setzt du dann einfach den entsprechenden wert.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

Z
Zwergi Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren

Hallo,

Danke für den Hinweis mit den Code Tags, das prüfe ich gleich!

Zur Frage: ja, es ist eine Klasse mit statischen Membern gewesen.
Properties anlegen klingt sehr gut. Habe ich nicht wirklich dran gedacht.
Danke

Z
Zwergi Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren

Also das mit der Property ist gut, ändere ich gerade ab.
Dennoch steht ich gerade auf dem Schlauch.
Sagen wir das eine Steuerelement hat zustand 1 (gelb) und das andere zustand=0 (grün).
woher weiß mein Steuerelement welches gerade neu gezeichnet wird und weiß welche Farbe es nehmen soll.

Hab da wohl eine Denkblockade. Ist das überhaupt sinnvoll oder sollte ich einfach zwei Steuerelemente zeichnen, obwohl die identisch sind, bis auf die Füllung.

Z
Zwergi Themenstarter:in
4 Beiträge seit 2019
vor 5 Jahren

Gut, das Problem ist gelöst.
Mit der Property kann ich vom Hauptfenster das jeweilige Steuerlement auf den Wert setzen.
Es klappt super.
DANKE!