none
Zustände der Labelfarben ändern sich nicht RRS feed

  • Frage

  • Hallo,

    ich bin Einsteiger in C# und brauch für folgendes Problem eure Hilfe:

    Ich habe in numX eine Werteingabe und 20Labels, die eine Rechnung aus dem numX Wert darstellen.

    in 6 weiteren numupdown Feldern gebe ich kritische Bereiche ein. Sollten Werte der 20 Labels in diesen kritischen Bereichen liegen, dann soll das Label gelb unterlegt sein, ansonsten in LightGray. Bei der ersten Ausführung des Programms funktioniert das Ganze auch super. Allerdings wenn ich dann den numX Wert ändere, bleiben die gelben Labels gelb vom vorigen Eingabewert und ändern sich nicht mehr. Es werden auch neue kritische Bereiche nicht gelb.

    Wie kann ich das lösen?

    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 SpindleSpeedFinder
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
    
            private void cmdStart_Click(object sender, EventArgs e)
            {
                Double eingabe;
                eingabe = Convert.ToDouble(numX.Text);
    
                Double krit1a;
                krit1a = Convert.ToDouble(num1.Text);
    
                Double krit1b;
                krit1b = Convert.ToDouble(num2.Text);
    
                Double krit1c;
                krit1c = Convert.ToDouble(num3.Text);
    
                Double krit1d;
                krit1d = Convert.ToDouble(num4.Text);
    
                Double krit1e;
                krit1e = Convert.ToDouble(num5.Text);
    
                Double krit1f;
                krit1f = Convert.ToDouble(num6.Text);
    
                //Berechnen der jeweiligen Harmonischen
    
                double a = eingabe / 60;
                double b = (eingabe / 60) * 2;
                double c = (eingabe / 60) * 3;
                double d = (eingabe / 60) * 4;
                double ea = (eingabe / 60) * 5;
                double f = (eingabe / 60) * 6;
                double g = (eingabe / 60) * 7;
                double h = (eingabe / 60) * 8;
                double i = (eingabe / 60) * 9;
                double j = (eingabe / 60) * 10;
                double k = (eingabe / 60) * 11;
                double l = (eingabe / 60) * 12;
                double m = (eingabe / 60) * 13;
                double n = (eingabe / 60) * 14;
                double o = (eingabe / 60) * 15;
                double p = (eingabe / 60) * 16;
                double qa = (eingabe / 60) * 17;
                double r = (eingabe / 60) * 18;
                double s = (eingabe / 60) * 19;
                double t = (eingabe / 60) * 20;
    
                //Ausgabe der jeweiligen Harmonischen
    
                lblh1.Text = "f=" + a;
                lblh2.Text = "f=" + b;
                lblh3.Text = "f=" + c;
                lblh4.Text = "f=" + d;
                lblh5.Text = "f=" + ea;
                lblh6.Text = "f=" + f;
                lblh7.Text = "f=" + g;
                lblh8.Text = "f=" + h;
                lblh9.Text = "f=" + i;
                lblh10.Text = "f=" + j;
                lblh11.Text = "f=" + k;
                lblh12.Text = "f=" + l;
                lblh13.Text = "f=" + m;
                lblh14.Text = "f=" + n;
                lblh15.Text = "f=" + o;
                lblh16.Text = "f=" + p;
                lblh17.Text = "f=" + qa;
                lblh18.Text = "f=" + r;
                lblh19.Text = "f=" + s;
                lblh20.Text = "f=" + t;
    
              
    
                if ((a >= krit1a && a <= krit1b) || (a >= krit1c && a <= krit1d) || (a >= krit1e && a <= krit1f))
                { 
                    lblh1.BackColor = Color.Yellow;
                }
                if ((b >= krit1a && b <= krit1b) || (b >= krit1c && b <= krit1d) || (b >= krit1e && b <= krit1f))
                {
                    lblh2.BackColor = Color.Yellow;
                }
                if ((c >= krit1a && c <= krit1b) || (c >= krit1c && c <= krit1d) || (c >= krit1e && c <= krit1f))
                {
                    lblh3.BackColor = Color.Yellow;
                }
                if ((d >= krit1a && d <= krit1b) || (d >= krit1c && d <= krit1d) || (d >= krit1e && d <= krit1f))
                {
                    lblh4.BackColor = Color.Yellow;
                }
                if ((ea >= krit1a && ea <= krit1b) || (ea >= krit1c && ea <= krit1d) || (ea >= krit1e && ea <= krit1f))
                {
                    lblh5.BackColor = Color.Yellow;
                }
                if ((f >= krit1a && f <= krit1b) || (f >= krit1c && f <= krit1d) || (f >= krit1e && f <= krit1f))
                {
                    lblh6.BackColor = Color.Yellow;
                }
                if ((g >= krit1a && g <= krit1b) || (g >= krit1c && g <= krit1d) || (g >= krit1e && g <= krit1f))
                {
                    lblh7.BackColor = Color.Yellow;
                }
                if ((h >= krit1a && h <= krit1b) || (h >= krit1c && h <= krit1d) || (h >= krit1e && h <= krit1f))
                {
                    lblh8.BackColor = Color.Yellow;
                }
                if ((i >= krit1a && i <= krit1b) || (i >= krit1c && i <= krit1d) || (i >= krit1e && i <= krit1f))
                {
                    lblh9.BackColor = Color.Yellow;
                if ((j >= krit1a && j <= krit1b) || (j >= krit1c && j <= krit1d) || (j >= krit1e && j <= krit1f))
                { 
                    lblh10.BackColor = Color.Yellow;
                }
                if ((k >= krit1a && k <= krit1b) || (k >= krit1c && k <= krit1d) || (k >= krit1e && k <= krit1f))
                {
                    lblh11.BackColor = Color.Yellow;
                }
                if ((l >= krit1a && l <= krit1b) || (l >= krit1c && l <= krit1d) || (l >= krit1e && l <= krit1f))
                {
                    lblh12.BackColor = Color.Yellow;
                }
                if ((m >= krit1a && m <= krit1b) || (m >= krit1c && m <= krit1d) || (m >= krit1e && m <= krit1f))
                {
                    lblh13.BackColor = Color.Yellow;
                }
                if ((n >= krit1a && n <= krit1b) || (n >= krit1c && n <= krit1d) || (n >= krit1e && n <= krit1f))
                {
                    lblh14.BackColor = Color.Yellow;
                }
                if ((o >= krit1a && o <= krit1b) || (o >= krit1c && o <= krit1d) || (o >= krit1e && o <= krit1f))
                {
                    lblh15.BackColor = Color.Yellow;
                }
                if ((p >= krit1a && p <= krit1b) || (p >= krit1c && p <= krit1d) || (p >= krit1e && p <= krit1f))
                {
                    lblh16.BackColor = Color.Yellow;
                }
                if ((qa >= krit1a && qa <= krit1b) || (qa >= krit1c && qa <= krit1d) || (qa >= krit1e && qa <= krit1f))
                {
                    lblh17.BackColor = Color.Yellow;
                }
                if ((r >= krit1a && r <= krit1b) || (r >= krit1c && r <= krit1d) || (r >= krit1e && r <= krit1f))
                {
                    lblh18.BackColor = Color.Yellow;
                }
                if ((s >= krit1a && s <= krit1b) || (s >= krit1c && s <= krit1d) || (s >= krit1e && s <= krit1f))
                {
                    lblh19.BackColor = Color.Yellow;
                }
                if ((t >= krit1a && t <= krit1b) || (t >= krit1c && t <= krit1d) || (t >= krit1e && t <= krit1f))
                {
                    lblh20.BackColor = Color.Yellow;
                }
            }

    Gruß Carsten 
    Donnerstag, 21. Februar 2013 08:25

Antworten

  • Hallo,

    schau Dir noch mal meine Antwort von gestern an. Dort hatte ich gestern Abend zwei Zeilen hinzugefügt, nachdem Du die fehlende Anzeige  reklamiert hast. Die sehe ich jedoch bei Dir nicht.

    Gruß Elmar

    • Als Antwort markiert icecubeice Mittwoch, 27. Februar 2013 12:43
    Mittwoch, 27. Februar 2013 09:40
    Beantworter

Alle Antworten

  • Hallo Carsten,

    naja, Du brauchst auch einen else Zweig, wo Du die Standardfarbe der Labels wieder herstellt, wenn die Bedingung nicht mehr erfüllt ist:

      if ((a >= krit1a && a <= krit1b) || (a >= krit1c && a <= krit1d) || (a >= krit1e && a <= krit1f))
      { 
          lblh1.BackColor = Color.Yellow;
      }
      else
      {
           lblh1.BackColor = Color.Green; // oder eine andere Farbe
      }
    

    Im übrigen würde ich Dir empfehlen, Dich mit Arrays bzw. Auflistungen vertraut zu machen; dann könnte der Code um ein beträchtliches schrumpfen.

    So wäre nur noch eine if ... else Anweisung für die Farbgebung notwendig und auch Berechnung und Zuweisung könnte mit einer knappen Schleife abgewickelt werden.

    Gruß Elmar

    Donnerstag, 21. Februar 2013 09:21
    Beantworter
  • Danke dir Elmar für den Tipp, wie gesagt ich bin noch Einsteiger.

    Aber das hat mir noch nicht geholfen!

    Wenn ich jetzt die kritischen Werte und den Eingabe Wert ändere, dann bleiben die vorher gelbgewordenen Labels gelb und die Felder, die mit den neuen kritischen Grenzen gelb werden sollten, bleiben grau. Nur die Rechnung wird neu durchgeführt. Sonst passiert nichts.

    Donnerstag, 21. Februar 2013 15:02
  • Hallo,

    wenn Du die If Anweisung richtig gemacht hast, sollte es Grün (bei mir) werden.

    Um die Geschichte mit den Arrays zu zeigen, mal eine umgeschriebene Version:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace ElmarBoye.Samples.Forms
    {
        public partial class HarmonieForm : Form
        {
            private readonly TextBox[] KriterienTextBoxes;
            private readonly Label[] HarmonieLabels;
            
            public HarmonieForm()
            {
                InitializeComponent();
    
                // Verweise auf die Steuerelemente in einem Array
                HarmonieLabels = new Label[]
                {
                    // Die Namen der Labels (war lblhNN)
                    HarmonieLabel01, HarmonieLabel02, HarmonieLabel03, HarmonieLabel04, HarmonieLabel05,
                    HarmonieLabel06, HarmonieLabel07, HarmonieLabel08, HarmonieLabel09, HarmonieLabel10,
                    HarmonieLabel11, HarmonieLabel12, HarmonieLabel13, HarmonieLabel14, HarmonieLabel15,
                    HarmonieLabel16, HarmonieLabel17, HarmonieLabel18, HarmonieLabel19, HarmonieLabel20
                };
    
                KriterienTextBoxes = new TextBox[]
                {
                    // Die Namen der Textbox für Kriterien (war krit1[a-f])
                    KriteriumTextBox01, KriteriumTextBox02,
                    KriteriumTextBox02, KriteriumTextBox04,
                    KriteriumTextBox05, KriteriumTextBox06
                };
            }
    
            private void BerechnenButton_Click(object sender, EventArgs e)
            {
                double eingabe;
                double[] kriterien = new double[this.KriterienTextBoxes.Length];
                // Speichert die Werte (derzeit eigentlich nicht nötig)
                double[] harmonien = new double[this.HarmonieLabels.Length];
    
                try
                {
                    eingabe = Double.Parse(this.eingabeTextBox.Text);
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.KriterienTextBoxes.Length; index++)
                    {
                        kriterien[index] = Double.Parse(this.KriterienTextBoxes[index].Text);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Ungültige Eingabe:" + ex.Message, this.Text);
                    return;
                }
    
                // Berechnen der Harmonischen
                double basis = eingabe / 60.0;  // Basiswert (einmal dividieren reicht)
                for (int index = 0; index < harmonien.Length; index++)
                {
                    // Multiplizieren 
                    double wert = basis * (index + 1);
                    
                    // Für weitere Arbeiten speichern... so denn noch nötig
                    harmonien[index] = wert;
    
                    // Label Text setzen
                    HarmonieLabels[index].Text = String.Format("f={0:F3}", harmonien[index]);
    
                    // Einfärben (ginge auch über Schleife)
                    Color labelColor = Color.Green;
                    if ((wert >= kriterien[0] && wert <= kriterien[1]) 
                        || (wert >= kriterien[2] && wert <= kriterien[3]) 
                        || (wert >= kriterien[4] && wert <= kriterien[5]))
                        labelColor = Color.Yellow;
                    
                    // Alternativ mit mehreren Farben
                    //if (wert >= kriterien[0] && wert <= kriterien[1])
                    //    labelColor = Color.YellowGreen;
                    //else if (wert >= kriterien[2] && wert <= kriterien[3])
                    //    labelColor = Color.Yellow;
                    //else if (wert >= kriterien[4] && wert <= kriterien[5])
                    //    labelColor = Color.Red;
    
                    HarmonieLabels[index].BackColor = labelColor;
                }
            }
        }
    }
    

    Zu beachten: Ich habe die Label- und TextBox Steuerelemente beschreibender benannt - entweder benennst sie bei Dir ebenso, oder aber Du änderst die Namen in InitializeComponent wieder in Deine Namen um. (Wobei man beschreibende Namen vorziehen sollte, damit man seinen Code auch morgen und übermorgen noch versteht).

    Die Berechnen Routine (zur Schaltfläche zuordnen), konvertiert die Eingaben und speichert sie in ein Array Kriterien.

    Das eigentliche Berechnen erfolgt nun in einer Schleife. Dabei wird dem zugehörigen Label der Text zugewiesen und die passende Farbe ermittelt. Auskommentiert habe ich eine Alternative, bei der es für jeden Kriterienbereich eine eigene Farbe gibt.

    Schau es Dir mal an und versuche es nachzuvollziehen.

    Gruß Elmar


    Donnerstag, 21. Februar 2013 17:30
    Beantworter
  • Danke Elmar,

    der Wahnsinn! Funktioniert super!

    Freitag, 22. Februar 2013 09:06
  • Hallo Elmar, ich habe noch eine Frage:

    Ich habe nun eine weiter Berechnung zugefügt. Hier soll aus einer Frequenz (Frequenztextbox01) die jeweiligen kritischen Drehzahlen errechnet werden. Genauso auch eingefärbt werden.

    Das DrehzahlLabel01 soll den errechneten Wert 1:1 ausgeben. DIe Labels 02-15 sollen den Wert multiplizieren, die Labels 16-37 dividieren. Einfärben der Labels ist gleich wie bei der vorherigen Aufgabenstellung. Ich habe den "alten" Code übernommen und so angepasst wie ich es dachte, dass es passen sollte, allerdings wird kein Wert berechnet. Wenn ich auf den Berechnenbutton2 klicke. Nur in einem Teil der Labels steht dann n= (aber hier eben dann kein Wert)

    Außerdem ist ganz am Ende im Code bei //Einfärben niedrig bei if((db2 .... das db2 immer unterkringelt. Verstehe ich aber nicht wieso. Bitte nochmal um deine Hilfe!

    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 SpindleSpeedFinder
    {
        public partial class SpindleSpeedFinder : Form
        {
            private readonly TextBox[] KriterienTextBoxes;
            private readonly Label[] HarmonieLabels;
            private readonly TextBox[] DKriterienTextBoxes;
            private readonly Label[] DrehzahlLabelshoch;
            private readonly Label[] DrehzahlLabelsniedrig;
    
    
            public SpindleSpeedFinder()
            {
                InitializeComponent();
    
                // Verweise auf die Steuerelemente in einem Array
                HarmonieLabels = new Label[]
                {
                    // Die Namen der Labels 
                    HarmonieLabel01, HarmonieLabel02, HarmonieLabel03, HarmonieLabel04, HarmonieLabel05,
                    HarmonieLabel06, HarmonieLabel07, HarmonieLabel08, HarmonieLabel09, HarmonieLabel10,
                    HarmonieLabel11, HarmonieLabel12, HarmonieLabel13, HarmonieLabel14, HarmonieLabel15,
                    HarmonieLabel16, HarmonieLabel17, HarmonieLabel18, HarmonieLabel19, HarmonieLabel20,
                    HarmonieLabel21, HarmonieLabel22, HarmonieLabel23, HarmonieLabel24, HarmonieLabel25,
                    HarmonieLabel26, HarmonieLabel27, HarmonieLabel28, HarmonieLabel29, HarmonieLabel30,
                    HarmonieLabel31, HarmonieLabel32, HarmonieLabel33, HarmonieLabel34, HarmonieLabel35,
                    HarmonieLabel36, HarmonieLabel37, HarmonieLabel38, HarmonieLabel39, HarmonieLabel40,
                    HarmonieLabel41, HarmonieLabel42, HarmonieLabel43, HarmonieLabel44, HarmonieLabel45,
                    HarmonieLabel46, HarmonieLabel47, HarmonieLabel48, HarmonieLabel49, HarmonieLabel50,
                    HarmonieLabel51, HarmonieLabel52, HarmonieLabel53, HarmonieLabel54, HarmonieLabel55,
                    HarmonieLabel51, HarmonieLabel52, HarmonieLabel53, HarmonieLabel54, HarmonieLabel55,
                    HarmonieLabel56, HarmonieLabel57, HarmonieLabel58, HarmonieLabel59, HarmonieLabel60,
                   
                };
    
                KriterienTextBoxes = new TextBox[]
                {
                    // Die Namen der Textbox für Kriterien 
                    KriteriumTextBox01, KriteriumTextBox02,
                    KriteriumTextBox02, KriteriumTextBox04,
                    KriteriumTextBox05, KriteriumTextBox06
                };
    
                DrehzahlLabelshoch = new Label[]
                {
                    //Die Namen der DrehzahlLabels
                    Drehzahlausgabelabel01, Drehzahlausgabelabel02, Drehzahlausgabelabel03, Drehzahlausgabelabel04,
                    Drehzahlausgabelabel05, Drehzahlausgabelabel06, Drehzahlausgabelabel07, Drehzahlausgabelabel08,
                    Drehzahlausgabelabel09, Drehzahlausgabelabel10, Drehzahlausgabelabel11, Drehzahlausgabelabel12,
                    Drehzahlausgabelabel13, Drehzahlausgabelabel14, Drehzahlausgabelabel15
                };
    
                DrehzahlLabelsniedrig = new Label[]
                {
                    //Die Namen der DrehzahlLabels
                    Drehzahlausgabelabel16,
                    Drehzahlausgabelabel17, Drehzahlausgabelabel18, Drehzahlausgabelabel19, Drehzahlausgabelabel20,
                    Drehzahlausgabelabel21, Drehzahlausgabelabel22, Drehzahlausgabelabel23, Drehzahlausgabelabel24,
                    Drehzahlausgabelabel25, Drehzahlausgabelabel26, Drehzahlausgabelabel27, Drehzahlausgabelabel28,
                    Drehzahlausgabelabel29, Drehzahlausgabelabel30, Drehzahlausgabelabel31, Drehzahlausgabelabel32,
                    Drehzahlausgabelabel33, Drehzahlausgabelabel34, Drehzahlausgabelabel35, Drehzahlausgabelabel36,
                    Drehzahlausgabelabel37
                };
    
                DKriterienTextBoxes = new TextBox[]
                {
                    //Die Namen der krit. Drehzahlbereiche
                    DKriterium01, DKriterium02, DKriterium03, DKriterium04, DKriterium05, DKriterium06
                };
    
            }
    
            private void Berechnenbutton_Click(object sender, EventArgs e)
            {
                double eingabe;
                double schneiden;
    
                // Speichert die Werte (derzeit eigentlich nicht nötig)
                double[] kriterien = new double[this.KriterienTextBoxes.Length];
                double[] harmonien = new double[this.HarmonieLabels.Length];
    
                try
                {
                    eingabe = Double.Parse(this.eingabeTextBox.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.KriterienTextBoxes.Length; index++)
                    {
                        kriterien[index] = Double.Parse(this.KriterienTextBoxes[index].Text);
                    }
    
                    schneiden = Double.Parse(this.schneidenTextBox.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.KriterienTextBoxes.Length; index++)
                    {
                        kriterien[index] = Double.Parse(this.KriterienTextBoxes[index].Text);
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show(this, "Bitte eine Drehzahl eingeben!", this.Text);
                    return;
                }
    
                // Berechnen der Harmonischen
                double basis = (eingabe / 60.0) * schneiden;  // Basiswert (einmal dividieren reicht)
                for (int index = 0; index < harmonien.Length; index++)
                {
                    // Multiplizieren 
                    double wert = basis * (index + 1);
    
                    // Für weitere Arbeiten speichern... so denn noch nötig
                    harmonien[index] = wert;
    
                    // Label Text setzen
                    HarmonieLabels[index].Text = String.Format("f={0:F3}", harmonien[index]);
    
                    // Einfärben (ginge auch über Schleife)
                    Color labelColor = Color.LimeGreen;
                    if ((wert >= kriterien[0] && wert <= kriterien[1])
                        || (wert >= kriterien[2] && wert <= kriterien[3])
                        || (wert >= kriterien[4] && wert <= kriterien[5]))
                        labelColor = Color.Yellow;
    
                    HarmonieLabels[index].BackColor = labelColor;
    
                }
            }
    
            private void Berechnenbutton2_Click(object sender, EventArgs e)
            {
                double eingabe2;
                double schneiden2;
    
    
                // Speichert die Werte (derzeit eigentlich nicht nötig)
                double[] dkriterien = new double[this.DKriterienTextBoxes.Length];
                double[] drehzahlenhoch = new double[this.DrehzahlLabelshoch.Length];
                double[] drehzahlenniedrig = new double[this.DrehzahlLabelsniedrig.Length];
    
    
                try
                {
                    eingabe2 = Double.Parse(this.FrequenzTextBox01.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.DKriterienTextBoxes.Length; index++)
                    {
                        dkriterien[index] = Double.Parse(this.DKriterienTextBoxes[index].Text);
                    }
    
                    schneiden2 = Double.Parse(this.SchneidenTextBox2.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.DKriterienTextBoxes.Length; index++)
                    {
                        dkriterien[index] = Double.Parse(this.DKriterienTextBoxes[index].Text);
                    }
    
                }
                catch (Exception)
                {
                    MessageBox.Show(this, "Bitte eine Frequenz eingeben!", this.Text);
                    return;
                }
                
                int ind1, ind2;
    
                // Berechnung hoch
                double basishoch = (eingabe2 * 60.0) / schneiden2;
                for (ind1 = 0; ind1 < drehzahlenhoch.Length; ind1++)
                {
                    // Multiplizieren 
                    double db1, db2;
                    db1 = basishoch * (ind1 + 1);
    
                // Berechnung niedrig
    
               
                double basisniedrig = (eingabe2 * 60.0) / schneiden2;
                for (ind2= 0; ind2 < drehzahlenhoch.Length; ind2++)
                    
                    // Dividieren
                    db2 = basisniedrig / (ind2 + 1);
    
                    // Label Text setzen
                    DrehzahlLabelshoch[ind1].Text = String.Format("n={0:F3}", drehzahlenhoch[ind1]);
                    DrehzahlLabelsniedrig[ind2].Text = String.Format("n={0:F3}", drehzahlenniedrig[ind2]);
    
                    // Einfärben hoch(ginge auch über Schleife)
                    Color labelColor = Color.LimeGreen;
                    if ((db1 >= dkriterien[0] && db1 <= dkriterien[1])
                        || (db1 >= dkriterien[2] && db1 <= dkriterien[3])
                        || (db1 >= dkriterien[4] && db1 <= dkriterien[5]))
                        labelColor = Color.Yellow;
    
                    DrehzahlLabelshoch[ind1].BackColor = labelColor;
    
                    // Einfärben niedrig(ginge auch über Schleife)
                    Color labelColorn = Color.LimeGreen;
                    
                    if ((db2 >= dkriterien[0] && db2 <= dkriterien[1])
                        || (db2 >= dkriterien[2] && db2 <= dkriterien[3])
                        || (db2 >= dkriterien[4] && db2 <= dkriterien[5]))
                        labelColorn = Color.Yellow;
    
                    DrehzahlLabelsniedrig[ind2].BackColor = labelColorn;
                }
    
    
            }
        }
    }

    Dienstag, 26. Februar 2013 06:15
  • Hallo,

    so wie ich Deinen Code interpretiere, hast Du zwei unabhängige Berechnungen. Nur hast Du beiden for-Schleifen zusammengefasst und so würde die zweite Schleife 15 Mal ausgeführt werden. Zudem fehlt die Klammerung für die for Schleife.

    Der zweite Teil (ohne Eingabe) sollte wohl eher so aussehen:

                // Berechnung hoch
                double basishoch = (eingabe2 * 60.0) / schneiden2;
                for (int ind1 = 0; ind1 < drehzahlenhoch.Length; ind1++)
                {
                    // Multiplizieren 
                    double db1 = basishoch * (ind1 + 1);
                    drehzahlenhoch[ind1] = db1;
                    DrehzahlLabelshoch[ind1].Text = String.Format("n={0:F3}", drehzahlenhoch[ind1]);
    
                    // Einfärben hoch
                    Color labelColor = Color.LimeGreen;
                    if ((db1 >= dkriterien[0] && db1 <= dkriterien[1])
                        || (db1 >= dkriterien[2] && db1 <= dkriterien[3])
                        || (db1 >= dkriterien[4] && db1 <= dkriterien[5]))
                        labelColor = Color.Yellow;
    
                    DrehzahlLabelshoch[ind1].BackColor = labelColor;
                } // for ind1
    
                // Berechnung niedrig
                double basisniedrig = (eingabe2 * 60.0) / schneiden2;
                for (int ind2 = 0; ind2 < drehzahlenhoch.Length; ind2++)
                {
                    // Dividieren
                    double db2 = basisniedrig / (ind2 + 1);
    		drehzahlenniedrig[ind2] = db2;
                    DrehzahlLabelsniedrig[ind2].Text = String.Format("n={0:F3}", drehzahlenniedrig[ind2]);
    
                    // Einfärben niedrig
                    Color labelColorn = Color.LimeGreen;
    
                    if ((db2 >= dkriterien[0] && db2 <= dkriterien[1])
                        || (db2 >= dkriterien[2] && db2 <= dkriterien[3])
                        || (db2 >= dkriterien[4] && db2 <= dkriterien[5]))
                        labelColorn = Color.Yellow;
    
                    DrehzahlLabelsniedrig[ind2].BackColor = labelColorn;
                } // for ind2
            }

    Es empfiehlt sich einige Grundlagen zu pauken, z. B. Galileo Open Book Visual C# 2010 von Andreas Kühne

    und Aus der MSDN Hotline: Gültigkeitsbereich einer Variable (C#)


    Danach solltest Du verstehen können, dass die von Dir verwendeten Variablenpaare (ind1, ind2),  (db1, db2), (basishoch, basisniedrig), (labelColor, labelColorn) gar nicht notwendig (sinnvoll) sind.

    Denn programmieren heißt immer auch verstehen...

    Gruß Elmar


    Dienstag, 26. Februar 2013 08:19
    Beantworter
  • werden die Kriterien ausgefüllt, färben sich auch bestimmte Labels, allerdings stehen in den Labels keine gerechneten werte, sondern nur "n=0,000"

    Dienstag, 26. Februar 2013 08:28
  • Hallo,

    was daran liegt, dass in Deinem Code von Anfang was fehlt ...
    ich hatte nur verschoben, nicht getestet.
    Ich habe oben die fehlenden Zuweisungen eingefügt.

    Visual Studio bietet die Möglichkeit die Ausführung schrittweise zu durchlaufen.
    Als kleiner Einstieg: Exemplarische Vorgehensweise: Debuggen eines Windows Forms

    Ich kann nur wiederholen: Beschäftige Dich mit Deinem Code.

    Gruß Elmar
    Dienstag, 26. Februar 2013 08:51
    Beantworter
  • Ich habe im Code keine Fehler, zumindest werden keine angezeigt. Ich kann das erstellte Form ohne Probleme starten. Ich sehe auch anhand der farbigen Labels, dass die Rechenoperation richtig durchgeführt wird. Einziges Problem ist, dass dann eben nicht die gerechneten Werte angezeigt werden, sondern n=0,000.

    Die Ausgabe an den Labels haut nicht hin. Ich habe es auch schon mit :

    ...String.Format("n={0:g}",.... versucht. Brachte aber auch nichts. Ich bin mir sicher, dass es nur ein ganz kleiner, eigentlich offensichtlicher unpassender Befehl ist, aber ich komm einfach nicht drauf!!!

    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 SpindleSpeedFinder
    {
        public partial class SpindleSpeedFinder : Form
        {
            private readonly TextBox[] KriterienTextBoxes;
            private readonly Label[] HarmonieLabels;
            private readonly TextBox[] DKriterienTextBoxes;
            private readonly Label[] DrehzahlLabelshoch;
            private readonly Label[] DrehzahlLabelsniedrig;
    
    
            public SpindleSpeedFinder()
            {
                InitializeComponent();
    
                // Verweise auf die Steuerelemente in einem Array
                HarmonieLabels = new Label[]
                {
                    // Die Namen der Labels 
                    HarmonieLabel01, HarmonieLabel02, HarmonieLabel03, HarmonieLabel04, HarmonieLabel05,
                    HarmonieLabel06, HarmonieLabel07, HarmonieLabel08, HarmonieLabel09, HarmonieLabel10,
                    HarmonieLabel11, HarmonieLabel12, HarmonieLabel13, HarmonieLabel14, HarmonieLabel15,
                    HarmonieLabel16, HarmonieLabel17, HarmonieLabel18, HarmonieLabel19, HarmonieLabel20,
                    HarmonieLabel21, HarmonieLabel22, HarmonieLabel23, HarmonieLabel24, HarmonieLabel25,
                    HarmonieLabel26, HarmonieLabel27, HarmonieLabel28, HarmonieLabel29, HarmonieLabel30,
                    HarmonieLabel31, HarmonieLabel32, HarmonieLabel33, HarmonieLabel34, HarmonieLabel35,
                    HarmonieLabel36, HarmonieLabel37, HarmonieLabel38, HarmonieLabel39, HarmonieLabel40,
                    HarmonieLabel41, HarmonieLabel42, HarmonieLabel43, HarmonieLabel44, HarmonieLabel45,
                    HarmonieLabel46, HarmonieLabel47, HarmonieLabel48, HarmonieLabel49, HarmonieLabel50,
                    HarmonieLabel51, HarmonieLabel52, HarmonieLabel53, HarmonieLabel54, HarmonieLabel55,
                    HarmonieLabel51, HarmonieLabel52, HarmonieLabel53, HarmonieLabel54, HarmonieLabel55,
                    HarmonieLabel56, HarmonieLabel57, HarmonieLabel58, HarmonieLabel59, HarmonieLabel60,
                   
                };
    
                KriterienTextBoxes = new TextBox[]
                {
                    // Die Namen der Textbox für Kriterien 
                    KriteriumTextBox01, KriteriumTextBox02,
                    KriteriumTextBox02, KriteriumTextBox04,
                    KriteriumTextBox05, KriteriumTextBox06
                };
    
                DrehzahlLabelshoch = new Label[]
                {
                    //Die Namen der DrehzahlLabels
                    Drehzahlausgabelabel01, Drehzahlausgabelabel02, Drehzahlausgabelabel03, Drehzahlausgabelabel04,
                    Drehzahlausgabelabel05, Drehzahlausgabelabel06, Drehzahlausgabelabel07, Drehzahlausgabelabel08,
                    Drehzahlausgabelabel09, Drehzahlausgabelabel10, Drehzahlausgabelabel11, Drehzahlausgabelabel12,
                    Drehzahlausgabelabel13, Drehzahlausgabelabel14, Drehzahlausgabelabel15
                };
    
                DrehzahlLabelsniedrig = new Label[]
                {
                    //Die Namen der DrehzahlLabels
                    Drehzahlausgabelabel16, Drehzahlausgabelabel17, Drehzahlausgabelabel18, Drehzahlausgabelabel19, 
                    Drehzahlausgabelabel20, Drehzahlausgabelabel21, Drehzahlausgabelabel22, Drehzahlausgabelabel23, 
                    Drehzahlausgabelabel24, Drehzahlausgabelabel25, Drehzahlausgabelabel26, Drehzahlausgabelabel27, 
                    Drehzahlausgabelabel28, Drehzahlausgabelabel29, Drehzahlausgabelabel30, Drehzahlausgabelabel31, 
                    Drehzahlausgabelabel32, Drehzahlausgabelabel33, Drehzahlausgabelabel34, Drehzahlausgabelabel35, 
                    Drehzahlausgabelabel36, Drehzahlausgabelabel37
                };
    
                DKriterienTextBoxes = new TextBox[]
                {
                    //Die Namen der krit. Drehzahlbereiche
                    DKriterium01, DKriterium02, 
                    DKriterium03, DKriterium04, 
                    DKriterium05, DKriterium06
                };
    
            }
    
            private void Berechnenbutton_Click(object sender, EventArgs e)
            {
                double eingabe;
                double schneiden;
    
                // Speichert die Werte (derzeit eigentlich nicht nötig)
                double[] kriterien = new double[this.KriterienTextBoxes.Length];
                double[] harmonien = new double[this.HarmonieLabels.Length];
    
                try
                {
                    eingabe = Double.Parse(this.eingabeTextBox.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.KriterienTextBoxes.Length; index++)
                    {
                        kriterien[index] = Double.Parse(this.KriterienTextBoxes[index].Text);
                    }
    
                    schneiden = Double.Parse(this.schneidenTextBox.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.KriterienTextBoxes.Length; index++)
                    {
                        kriterien[index] = Double.Parse(this.KriterienTextBoxes[index].Text);
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show(this, "Bitte eine Drehzahl eingeben!", this.Text);
                    return;
                }
    
                // Berechnen der Harmonischen
                double basis = (eingabe / 60.0) * schneiden;  // Basiswert (einmal dividieren reicht)
                for (int index = 0; index < harmonien.Length; index++)
                {
                    // Multiplizieren 
                    double wert = basis * (index + 1);
    
                    // Für weitere Arbeiten speichern... so denn noch nötig
                    harmonien[index] = wert;
    
                    // Label Text setzen
                    HarmonieLabels[index].Text = String.Format("f={0:F3}", harmonien[index]);
    
                    // Einfärben (ginge auch über Schleife)
                    Color labelColor = Color.LimeGreen;
                    if ((wert >= kriterien[0] && wert <= kriterien[1])
                        || (wert >= kriterien[2] && wert <= kriterien[3])
                        || (wert >= kriterien[4] && wert <= kriterien[5]))
                        labelColor = Color.Yellow;
    
                    HarmonieLabels[index].BackColor = labelColor;
    
                }
            }
    
            private void Berechnenbutton2_Click(object sender, EventArgs e)
            {
                double eingabe2;
                double schneiden2;
    
    
                // Speichert die Werte (derzeit eigentlich nicht nötig)
                double[] dkriterien = new double[this.DKriterienTextBoxes.Length];
                double[] drehzahlenhoch = new double[this.DrehzahlLabelshoch.Length];
                double[] drehzahlenniedrig = new double[this.DrehzahlLabelsniedrig.Length];
    
    
                try
                {
                    eingabe2 = Double.Parse(this.FrequenzTextBox01.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.DKriterienTextBoxes.Length; index++)
                    {
                        dkriterien[index] = Double.Parse(this.DKriterienTextBoxes[index].Text);
                    }
    
                    schneiden2 = Double.Parse(this.SchneidenTextBox2.Text);
    
                    // Kriterien in einer Schleife umwandeln
                    for (int index = 0; index < this.DKriterienTextBoxes.Length; index++)
                    {
                        dkriterien[index] = Double.Parse(this.DKriterienTextBoxes[index].Text);
                    }
    
                }
                catch (Exception)
                {
                    MessageBox.Show(this, "Bitte eine Frequenz eingeben!", this.Text);
                    return;
                }
                
               
    
               // Berechnung hoch
                double basishoch = (eingabe2 * 60.0) / schneiden2;
                for (int ind1 = 0; ind1 < drehzahlenhoch.Length; ind1++)
                {
                    // Multiplizieren 
                    double db1 = basishoch * (ind1 + 1);
    
               // Wert in Label
                    DrehzahlLabelshoch[ind1].Text = String.Format("n={0:F3}", drehzahlenhoch[ind1]);
    
                    // Einfärben hoch
                    Color labelColorh = Color.LimeGreen;
                    if ((db1 >= dkriterien[0] && db1 <= dkriterien[1])
                        || (db1 >= dkriterien[2] && db1 <= dkriterien[3])
                        || (db1 >= dkriterien[4] && db1 <= dkriterien[5]))
                        labelColorh = Color.Yellow;
    
                    DrehzahlLabelshoch[ind1].BackColor = labelColorh;
                } 
    
                // Berechnung niedrig
                double basisniedrig = (eingabe2 * 60.0) / schneiden2;
                for (int ind2 = 0; ind2 < drehzahlenniedrig.Length; ind2++)
                {
                    // Dividieren
                    double db2 = basisniedrig / (ind2 + 1);
                    
                    //Wert in Label
                    DrehzahlLabelsniedrig[ind2].Text = String.Format("n={0:F3}", drehzahlenniedrig[ind2]);
    
                    // Einfärben niedrig(ginge auch über Schleife)
                    Color labelColorn = Color.LimeGreen;
    
                    if ((db2 >= dkriterien[0] && db2 <= dkriterien[1])
                        || (db2 >= dkriterien[2] && db2 <= dkriterien[3])
                        || (db2 >= dkriterien[4] && db2 <= dkriterien[5]))
                        labelColorn = Color.Yellow;
    
                    DrehzahlLabelsniedrig[ind2].BackColor = labelColorn;
                } 
            }
                }
    
    
            
    }
    

    Mittwoch, 27. Februar 2013 07:56
  • Hallo,

    schau Dir noch mal meine Antwort von gestern an. Dort hatte ich gestern Abend zwei Zeilen hinzugefügt, nachdem Du die fehlende Anzeige  reklamiert hast. Die sehe ich jedoch bei Dir nicht.

    Gruß Elmar

    • Als Antwort markiert icecubeice Mittwoch, 27. Februar 2013 12:43
    Mittwoch, 27. Februar 2013 09:40
    Beantworter
  • Vielen Dank,

    hab wirklich nur die beiden Zeilen vergessen!

    Jetzt funktioniert alles!

    MfG

    Mittwoch, 27. Februar 2013 12:44