Benutzer mit den meisten Antworten
Zustände der Labelfarben ändern sich nicht

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
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
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
-
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.
-
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
- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Montag, 25. Februar 2013 21:37
- Als Antwort markiert icecubeice Dienstag, 26. Februar 2013 05:34
- Tag als Antwort aufgehoben icecubeice Dienstag, 26. Februar 2013 06:10
-
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; } } } }
-
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
- Bearbeitet Elmar BoyeEditor Dienstag, 26. Februar 2013 08:45 Nachhilfe Nr. 3
-
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 FormsIch kann nur wiederholen: Beschäftige Dich mit Deinem Code.
Gruß Elmar -
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; } } } }
-
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