Zum Inhalt springen

Kackboon

Mitglieder
  • Gesamte Inhalte

    23
  • Benutzer seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

  1. Mein Fehler Der Code für die .add() Methode ist zwei mal vorhanden (mein amateurversuch das zum laufen zu bringen) hab den falschen code hier rein kopiert. Der richtige code von der saveandload klasse ist der hier: public void add() { Form1 f2 = new Form1(); Fehlermeldungen f1 = new Fehlermeldungen(f2.textBox4.Text, f2.comboBox2.Text, f2.dateTimePicker4.Text, f2.dateTimePicker3.Text, f2.textBox2.Text); ListViewItem lvi = new ListViewItem(); lvi.Text = f1.Name; lvi.SubItems.Add(f1.Gerät); lvi.SubItems.Add(f1.Datum); lvi.SubItems.Add(f1.Uhrzeit); lvi.SubItems.Add(f1.Fehlermeldung); f2.listView1.Items.Add(lvi); f2.textBox4.Clear(); f2.textBox2.Clear(); } Zusätzlich habe ich auch mit dem hier experimentiert: public class saveandload : Form1 { Habe einfach ": Form1" hinzugefügt in der Hoffnung, dass ich dann nicht diese Instanziierung benötige für die TextBoxen und listviewitem etc. Er gibt auch keinen Compilerfehler wenn ich das "f2." vor den TextBoxen etc weglasse (brauch ich also nicht?) dennoch funktioniert das ganze so nicht. Wenn ich dich richtig verstehe sorgt also diese diese Vererbung NICHT dafür, dass er die ListView aus der Form1 nimmt wenn ich diese verwenden möchte in der saveandload klasse? Ich dachte bislang dass man Zugriff auf die Objekte aus anderen Klassen (oder Formen) durch diese Instanziierung erhält und das man sie dann verwenden kann. Offensichtlich scheint das nicht der Fall zu sein. Wie füge ich denn so eine Referenz hinzu ? Habe das noch nie gemacht.
  2. Lief zu großen Teilen bereits. Doch jetzt habe ich ein anderes Problem... ^^ Ich wollte die Methoden in externe Klassen auslagern und diese dann in meiner Form1 aufrufen. Sodass ich unter einem Button-Event nur den Methodennamen (und die dazugehörige Instanziierung der Klasse) habe... Mysteriöserweise funktioniert nun wirklich gar nichts mehr. Weder das aufnehmen der Daten von den Eingabefeldern in das ListViewObjekt, noch das speichern/laden etc. Es gibt keinen Compiler-Fehler. Im Debug Modus wenn ich den Haltepunkt bei einer Methode setze führt er diese auch aus (nachdem er im Designer einmal alles abgelaufen ist..??). Doch leider schreibt er nichts in das ListViewObjekt rein. Alles was ich getan habe war den Code zu verschieben. Ich habe nichts daran geändert (außer die Instanzen hinzugefügt damit ich auf externe Sachen Zugreifen kann. Beispiel: private void button1_Click(object sender, EventArgs e) { saveandload s1 = new saveandload(); Fehlermeldungen f1 = new Fehlermeldungen(textBox4.Text, comboBox2.Text, dateTimePicker4.Text, dateTimePicker3.Text, textBox2.Text); //s1.add(); f1.add(); } Das ist mein "hinzufügen" Button, der die Daten in das ListViewObjekt eintragen soll. Der Liegt in der Form1. public void add() { //Form1 f2 = new Form1(); Fehlermeldungen f1 = new Fehlermeldungen(textBox4.Text, comboBox2.Text, dateTimePicker4.Text, dateTimePicker3.Text, textBox2.Text); ListViewItem lvi = new ListViewItem(); lvi.Text = f1.Name; lvi.SubItems.Add(f1.Gerät); lvi.SubItems.Add(f1.Datum); lvi.SubItems.Add(f1.Uhrzeit); lvi.SubItems.Add(f1.Fehlermeldung); listView1.Items.Add(lvi); textBox4.Clear(); textBox2.Clear(); } Das ist meine Methode die in der externen saveandload-Klasse liegt. Sollte doch eigentlich funktionieren soweit, oder nicht ?
  3. beim Starten im Debug-Modus stelle ich fest, dass er gar nicht erst in die Bedingung rein geht. Müsste doch eigentlich gehen, da es unter dem Load Event ist. Daran scheitere ich leider. ich weiß nicht wie das aussehen soll. Schließlich muss er ja die Benamsung der "lvi1", "lvi2", etc. immer erweitern. Zusätzlich müssen auch die nummern der [ ]angepasst werden, sodass er nicht jedes mal nur die ersten5 nimmt. ListViewItem lvi23 = new ListViewItem(); lvi23.Text = fileitems[100]; lvi23.SubItems.Add(fileitems[101].ToString()); lvi23.SubItems.Add(fileitems[102].ToString()); lvi23.SubItems.Add(fileitems[103].ToString()); lvi23.SubItems.Add(fileitems[104].ToString()); listView1.Items.Add(lvi23); Weiß leider nicht wie man das umsetzt
  4. Funktioniert mittlerweile. Habe einfach ein neues ListViewItem eingefügt und die zahlen angepasst. Aber das geht bestimmt auch ohne dass ich 99x den selben Code einfügen muss (siehe unten), oder ? Darüberhinaus möchte ich, dass er beim Laden der Form1 - nachdem er die Werte in die Liste eingetragen hat - eine IF-Bedingung ausführt (siehe code). Und zwar soll er in jedem ListViewItem prüfen, ob das "Datum"-Feld mehr als 3 Tage in der Vergangenheit liegt. Ist das der Fall soll die ganze Reihe (das entsprechende ListViewItem) auf die Hintergrundfarbe Orange geändert werden. Hier der Code: private void Form1_Load(object sender, EventArgs e) { StreamReader sr2 = new StreamReader(@"C:\Fehlermeldung Drucker\Inhalt.txt"); string filecontent = sr2.ReadToEnd(); string[] fileitems = filecontent.Split('/'); //string[] filerows = filecontent.Split('+'); sr2.Dispose(); ListViewItem lvi3 = new ListViewItem(); lvi3.Text = fileitems[0]; lvi3.SubItems.Add(fileitems[1].ToString()); lvi3.SubItems.Add(fileitems[2].ToString()); lvi3.SubItems.Add(fileitems[3].ToString()); lvi3.SubItems.Add(fileitems[4].ToString()); listView1.Items.Add(lvi3); ListViewItem lvi4 = new ListViewItem(); lvi4.Text = fileitems[5]; lvi4.SubItems.Add(fileitems[6].ToString()); lvi4.SubItems.Add(fileitems[7].ToString()); lvi4.SubItems.Add(fileitems[8].ToString()); lvi4.SubItems.Add(fileitems[9].ToString()); listView1.Items.Add(lvi4); ListViewItem lvi5 = new ListViewItem(); lvi5.Text = fileitems[10]; lvi5.SubItems.Add(fileitems[11].ToString()); lvi5.SubItems.Add(fileitems[12].ToString()); lvi5.SubItems.Add(fileitems[13].ToString()); lvi5.SubItems.Add(fileitems[14].ToString()); listView1.Items.Add(lvi5); ListViewItem lvi6 = new ListViewItem(); lvi6.Text = fileitems[15]; lvi6.SubItems.Add(fileitems[16].ToString()); lvi6.SubItems.Add(fileitems[17].ToString()); lvi6.SubItems.Add(fileitems[18].ToString()); lvi6.SubItems.Add(fileitems[19].ToString()); listView1.Items.Add(lvi6); ListViewItem lvi7 = new ListViewItem(); lvi7.Text = fileitems[20]; lvi7.SubItems.Add(fileitems[21].ToString()); lvi7.SubItems.Add(fileitems[22].ToString()); lvi7.SubItems.Add(fileitems[23].ToString()); lvi7.SubItems.Add(fileitems[24].ToString()); listView1.Items.Add(lvi7); ListViewItem lvi8 = new ListViewItem(); lvi8.Text = fileitems[25]; lvi8.SubItems.Add(fileitems[26].ToString()); lvi8.SubItems.Add(fileitems[27].ToString()); lvi8.SubItems.Add(fileitems[28].ToString()); lvi8.SubItems.Add(fileitems[29].ToString()); listView1.Items.Add(lvi8); ListViewItem lvi9 = new ListViewItem(); lvi9.Text = fileitems[30]; lvi9.SubItems.Add(fileitems[31].ToString()); lvi9.SubItems.Add(fileitems[32].ToString()); lvi9.SubItems.Add(fileitems[33].ToString()); lvi9.SubItems.Add(fileitems[34].ToString()); listView1.Items.Add(lvi9); ListViewItem lvi10 = new ListViewItem(); lvi10.Text = fileitems[35]; lvi10.SubItems.Add(fileitems[36].ToString()); lvi10.SubItems.Add(fileitems[37].ToString()); lvi10.SubItems.Add(fileitems[38].ToString()); lvi10.SubItems.Add(fileitems[39].ToString()); listView1.Items.Add(lvi10); ListViewItem lvi11 = new ListViewItem(); lvi11.Text = fileitems[40]; lvi11.SubItems.Add(fileitems[41].ToString()); lvi11.SubItems.Add(fileitems[42].ToString()); lvi11.SubItems.Add(fileitems[43].ToString()); lvi11.SubItems.Add(fileitems[44].ToString()); listView1.Items.Add(lvi11); ListViewItem lvi12 = new ListViewItem(); lvi12.Text = fileitems[45]; lvi12.SubItems.Add(fileitems[46].ToString()); lvi12.SubItems.Add(fileitems[47].ToString()); lvi12.SubItems.Add(fileitems[48].ToString()); lvi12.SubItems.Add(fileitems[49].ToString()); listView1.Items.Add(lvi12); ListViewItem lvi13 = new ListViewItem(); lvi13.Text = fileitems[50]; lvi13.SubItems.Add(fileitems[51].ToString()); lvi13.SubItems.Add(fileitems[52].ToString()); lvi13.SubItems.Add(fileitems[53].ToString()); lvi13.SubItems.Add(fileitems[54].ToString()); listView1.Items.Add(lvi13); ListViewItem lvi14 = new ListViewItem(); lvi14.Text = fileitems[55]; lvi14.SubItems.Add(fileitems[56].ToString()); lvi14.SubItems.Add(fileitems[57].ToString()); lvi14.SubItems.Add(fileitems[58].ToString()); lvi14.SubItems.Add(fileitems[59].ToString()); listView1.Items.Add(lvi14); ListViewItem lvi15 = new ListViewItem(); lvi15.Text = fileitems[60]; lvi15.SubItems.Add(fileitems[61].ToString()); lvi15.SubItems.Add(fileitems[62].ToString()); lvi15.SubItems.Add(fileitems[63].ToString()); lvi15.SubItems.Add(fileitems[64].ToString()); listView1.Items.Add(lvi15); ListViewItem lvi16 = new ListViewItem(); lvi16.Text = fileitems[65]; lvi16.SubItems.Add(fileitems[66].ToString()); lvi16.SubItems.Add(fileitems[67].ToString()); lvi16.SubItems.Add(fileitems[68].ToString()); lvi16.SubItems.Add(fileitems[69].ToString()); listView1.Items.Add(lvi16); ListViewItem lvi17 = new ListViewItem(); lvi17.Text = fileitems[70]; lvi17.SubItems.Add(fileitems[71].ToString()); lvi17.SubItems.Add(fileitems[72].ToString()); lvi17.SubItems.Add(fileitems[73].ToString()); lvi17.SubItems.Add(fileitems[74].ToString()); listView1.Items.Add(lvi17); ListViewItem lvi18 = new ListViewItem(); lvi18.Text = fileitems[75]; lvi18.SubItems.Add(fileitems[76].ToString()); lvi18.SubItems.Add(fileitems[77].ToString()); lvi18.SubItems.Add(fileitems[78].ToString()); lvi18.SubItems.Add(fileitems[79].ToString()); listView1.Items.Add(lvi18); ListViewItem lvi19 = new ListViewItem(); lvi19.Text = fileitems[80]; lvi19.SubItems.Add(fileitems[81].ToString()); lvi19.SubItems.Add(fileitems[82].ToString()); lvi19.SubItems.Add(fileitems[83].ToString()); lvi19.SubItems.Add(fileitems[84].ToString()); listView1.Items.Add(lvi19); ListViewItem lvi20 = new ListViewItem(); lvi20.Text = fileitems[85]; lvi20.SubItems.Add(fileitems[86].ToString()); lvi20.SubItems.Add(fileitems[87].ToString()); lvi20.SubItems.Add(fileitems[88].ToString()); lvi20.SubItems.Add(fileitems[89].ToString()); listView1.Items.Add(lvi20); ListViewItem lvi21 = new ListViewItem(); lvi21.Text = fileitems[90]; lvi21.SubItems.Add(fileitems[91].ToString()); lvi21.SubItems.Add(fileitems[92].ToString()); lvi21.SubItems.Add(fileitems[93].ToString()); lvi21.SubItems.Add(fileitems[94].ToString()); listView1.Items.Add(lvi21); ListViewItem lvi22 = new ListViewItem(); lvi22.Text = fileitems[95]; lvi22.SubItems.Add(fileitems[96].ToString()); lvi22.SubItems.Add(fileitems[97].ToString()); lvi22.SubItems.Add(fileitems[98].ToString()); lvi22.SubItems.Add(fileitems[99].ToString()); listView1.Items.Add(lvi22); ListViewItem lvi23 = new ListViewItem(); lvi23.Text = fileitems[100]; lvi23.SubItems.Add(fileitems[101].ToString()); lvi23.SubItems.Add(fileitems[102].ToString()); lvi23.SubItems.Add(fileitems[103].ToString()); lvi23.SubItems.Add(fileitems[104].ToString()); listView1.Items.Add(lvi23); foreach (ListViewItem lwi in listView1.Items) { if (Convert.ToInt32(DateTime.Now) > Convert.ToInt32(dateTimePicker4.Value)+3) { lwi.BackColor = Color.OrangeRed; } } } Weiß jemand was ich falsch mache?
  5. Das mit den filerows war nur ein versuch. Hab ich mittlerweile wieder heraus genommen. Genau. Mein erste Gedanke war einfach der hier: using (StreamWriter sw = new StreamWriter(filename)) { foreach (ListViewItem item in listView1.Items) { sw.WriteLine("{0}/{1}/{2}/{3}/{4}/", item.SubItems[0].Text, item.SubItems[1].Text, item.SubItems[2].Text, item.SubItems[3].Text, item.SubItems[4].Text); } } da habe ich einfach ein "/" hinter der {4} gemacht damit er erkennt, dass ab dort ein neuer Datensatz beginnt. Nur gibt es danach keine column mehr. Hatte gehofft dass er dann automatisch die nächste row nimmt. Das scheint aber nicht so einfach zu funktionieren
  6. Ja daran hatte ich auch gedacht, nur hatte ich mich gefragt wie ich die Daten einlese ohne eine openfiledialog zu nutzen. Letztendlich sieht es bei mir nun so aus: private void Form1_Load(object sender, EventArgs e) { StreamReader sr2 = new StreamReader(@"C:\Users\NAME\Desktop\Inhalt.txt"); string filecontent = sr2.ReadToEnd(); string[] fileitems = filecontent.Split('/'); string[] filerows = filecontent.Split('+'); sr2.Dispose(); ListViewItem lvi3 = new ListViewItem(); lvi3.Text = fileitems[0]; lvi3.SubItems.Add(fileitems[1].ToString()); lvi3.SubItems.Add(fileitems[2].ToString()); lvi3.SubItems.Add(fileitems[3].ToString()); lvi3.SubItems.Add(fileitems[4].ToString()); listView1.Items.Add(lvi3); } Problem an der Sache ist, dass er in der Liste nun die Items/Subitems pro spalte einträgt - allerdings nicht die nächste reihe anfängt. Stattdessen sieht das so aus: Das Blaue ist bereits der nächste Datensatz. Davon zeigt er allerdings nur den Namen an und wie gesagt nicht in der nächsten Reihe. Muss ich da einfach eine 2te Instanz des ListViewItems anlegen? Falls ja woher weiß er wann ein Datensatz endet und wann ein neuer beginnt ? Als ich das versucht habe hat er zwar eine zweite Reihe gemacht, allerdings mit den Daten des ersten Datensatzes..
  7. @Whiz-zarD hatte nicht realisiert, dass die Platzhalter auch dazu zählen ^^ Danke für den Hinweis! Jetzt läuft es einwandfrei Ich überleg gerade ob es eine Methode gibt die Daten der zuletzt verwendeten Liste (Im Programm) automatisch beim starten des Programms einzuladen. (Ungern möchte ich beim starten des Programms die letzte Liste manuell auswählen und laden) Jemand eine Idee ?
  8. Hallo Leute Ich schreibe zur Zeit an einem Programm kleinen Programm, welches Eingaben in eine ListView speichert. Jetzt wollte ich gerne diese Einträge von der ListView in ein .txt Dokument abspeichern. Leider funktioniert das nur mäßig. Aktuell speichert er leider nur die ersten drei Werte von fünf. Die Werte sind alle als String deklariert. Hier der Code: Das ist das Objekt Fehlermeldungen namespace Drucker_Fehlermeldung_WF { public class Fehlermeldungen { public string Name { get; set; } public string Gerät { get; set; } public string Datum { get; set; } public string Uhrzeit { get; set; } public string Fehlermeldung { get; set; } public Fehlermeldungen(string Name, string Gerät, string Datum, string Uhrzeit, string Fehlermeldung) { this.Name = Name; this.Gerät = Gerät; this.Datum = Datum; this.Uhrzeit = Uhrzeit; this.Fehlermeldung = Fehlermeldung; } } } hier füge ich die Eingaben dem listView hinzu: namespace Drucker_Fehlermeldung_WF { public class hinzufügen { public void add() { Fehlermeldungen f1 = new Fehlermeldungen(textBox4.Text, comboBox2.Text, dateTimePicker4.Text, dateTimePicker3.Text, textBox2.Text); ListViewItem lvi = new ListViewItem(); lvi.Text = f1.Name; lvi.SubItems.Add(f1.Gerät); lvi.SubItems.Add(f1.Datum); lvi.SubItems.Add(f1.Uhrzeit); lvi.SubItems.Add(f1.Fehlermeldung); listView1.Items.Add(lvi); textBox4.Clear(); textBox2.Clear(); } } } und das hier ist der Hauptcode: namespace Drucker_Fehlermeldung_WF { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { Fehlermeldungen f1 = new Fehlermeldungen(textBox4.Text,comboBox2.Text, dateTimePicker4.Text, dateTimePicker3.Text, textBox2.Text); ListViewItem lvi = new ListViewItem(); lvi.Text = f1.Name; lvi.SubItems.Add(f1.Gerät); lvi.SubItems.Add(f1.Datum); lvi.SubItems.Add(f1.Uhrzeit); lvi.SubItems.Add(f1.Fehlermeldung); listView1.Items.Add(lvi); textBox4.Clear(); textBox2.Clear(); } public void button3_Click(object sender, EventArgs e) { SaveFileDialog sfd1 = new SaveFileDialog(); string filename = ""; sfd1.Title = "speichere Liste"; sfd1.Filter = "text files (*.txt)|*.txt|All files (*.*)|*.*|doc files (*.doc)|*.doc"; //sfd1.FilterIndex = 2; sfd1.RestoreDirectory = true; sfd1.OverwritePrompt = true; sfd1.ShowDialog(); if (sfd1.ShowDialog() == DialogResult.OK) { filename = sfd1.FileName.ToString(); if (filename != "") { using (StreamWriter sw = new StreamWriter(filename)) { foreach (ListViewItem item in listView1.Items) { sw.WriteLine("{0}{1}{2}{3}{4}", item.SubItems[0].Text, "/" , item.SubItems[1].Text, "/" , item.SubItems[2].Text, "/", item.SubItems[3].Text, "/", item.SubItems[4].Text); } } } //saveandload s1 = new saveandload(); //s1.save(); } } private void button4_Click(object sender, EventArgs e) { OpenFileDialog ofd1 = new OpenFileDialog(); ofd1.Filter = "Text Files(*.txt)|*.txt | all files(*.*)|*.*"; if (ofd1.ShowDialog() == DialogResult.OK) { listView1.Items.Clear(); string filename = ofd1.FileName; StreamReader sr = new StreamReader(filename); string filecontent = sr.ReadToEnd(); string[] fileitems = filecontent.Split('/'); sr.Dispose(); ListViewItem lvi2 = new ListViewItem(); lvi2.Text = fileitems[0]; lvi2.SubItems.Add(fileitems[1].ToString()); lvi2.SubItems.Add(fileitems[2].ToString()); lvi2.SubItems.Add(fileitems[3].ToString()); lvi2.SubItems.Add(fileitems[4].ToString()); listView1.Items.Add(lvi2); } } } } So sieht das Programm optisch aus: und das hier ist das Ergebnis beim speichern: "Hanswurst/Netzdrucker 2. OG/18.04.2018" Leider fehlen hier die Angaben "Datum" , "Uhrzeit" und "Fehlermeldung"... Kann mir jemand sagen woran das liegt ??? Zusätzlich ist es auch merkwürdig, dass ich beim Speichern aufgefordert werde einen Dateinamen anzugeben für die .txt Datei. Sobald ich dann auf "speichern" drücke" schließt er den safefiledialog und öffnet ihn direkt wieder, nun allerdings mit dem Pfad als Dateiname... gehört das so? Danke schon einmal im Voraus. Hoffe ich habe das Problem ausreichend beschrieben. Falls noch Fragen sind bitte gerne stellen.
  9. Kleines Update: Habe mittlerweile die Auswertung abgeschlossen. Er zeigt mir jetzt die Punkte an, den Prozentwert usw. Die nächste Idee war eine Art "Highscore" einzurichten. Dazu habe ich sobald man den Button "Auswerten" betätigt eine neue Form erstellen lassen. In diese habe ich ein ListView Objekt hereingezogen (Windows Forms) und mit entsprechenden spalten und Werten befüllt (statisch). Der Plan ist bei druck auf den "Auswerten"- Button den statischen Eintrag in der ListView zu ersetzen und zwar durch den Inhalt der TextBoxen, die ich am Anfang des Tests in der ersten Form habe ausfüllen lassen. Das sieht dann so aus: 1) 2) 3) Lasst euch nicht von der Reihenfolge bei der Benamsung der Forms irritieren.. Es ergibt sich mal wieder das Problem mit dem Zugriff auf besagte Labels und andere Objekte (ListView, Methoden, etc..) Wenn ich also auf "Auswerten" klicke möchte ich, dass er die Inhalte der TextBoxen aus 1) nimmt und diese sollen dann die Werte aus 3) ersetzen. Gibt bestimmt bessere Pläne wie man mit diesem LiestView umgehen kann zu diesem zwecke, aber da ich damit noch nie gearbeitet habe ist mir nichts besseres eingefallen. Ich habe eine "ersetzen" Methode in Form6 geschrieben, die so aussieht: public void ersetzen() { listView1.Items[1].SubItems[1].Text = form5bla; } public static string form5bla; Die variable form5bla wird von meiner form5 so verwendet: public void textBox1_TextChanged(object sender, EventArgs e) { Form6.form5bla = textBox1.Text; } nun versuche ich diese in meiner Auswertungsform (Form2) aufzurufen: Form6.ersetzen(); //für das nicht statische feld, die methode oder eigenschaft "Form6.ersetzen();" ist ein Objektverweis erforderlich ... geht nicht. Ich weiß nicht was ich noch machen soll. Hoffe das war irgendwie für irgendjemanden verständlich. Falls nicht helfe ich gern.
  10. VS Wo ist denn da der Unterschied? Im Prinzip hab ich doch genau das selbe gemacht, nur bei mir funktioniert es nicht. Deine Version haut aus mir nicht erischtlichen Gründen hin. Eine variable public static double und diese soll den Wert counterall / 11.00 haben.. Ich steh aufm Schlauch.
  11. Diese Vermutung hatte ich auch bereits. Daraufhin hatte ich dann versucht die variable einfach unter der ganzen counterall-hochzähl-geschichte zu deklarieren. Dies führte allerdings zu diversen anderen Fehlern. Beispielsweise wird mir alles nach der Deklaration der variable rot markiert. Also jede darauf folgende Zeile. "... ist im Kontext nicht verfügbar" Außerdem sagt er mir dann, dass irgendwo Klammern fehle.. Alternativ dachte ich, dass ich diese Prozent variable einfach in der Form 7 generiere und nicht in der Auswertung-Klasse, dann fehlt mir allerdings der Zugriff auf die "counterall" variable, die sich ja in der Auswertung-Klasse befindet. Zweite alternative war ja auch, dass ich einfach die counterall variable in double konvertiere. Vom Syntax hat's gepasst was ich da eingehackt habe, führte allerdings zum selben Ergebnis -> "0"..
  12. Gut zusammengefasst. Genau so ist das. public void button1_Click(object sender, EventArgs e) { //Global g1 = new Global(); Global.Auswertung(); MessageBox.Show(Global.counterall.ToString()); // gibt mir den Wert der variable zurück textBox1.Text = Global.counterall + " Punkte / 11 Punkten"; //textBox2.Text = (Convert.ToDouble(Global.counterall / 11)) + " %"; textBox2.Text = Global.prozent + " %"; Global.counterall = 0; //soll verhindern, dass wenn man erneut auf "Auswerten" klickt der counter einfach addiert wird. } Habe mir extra eine MessageBox ausgeben lassen um zu prüfen ob der counterall wirklich den korrekten Wert hat. Also das stimmt soweit. public class Global { public static int counterall = 0; public static double prozent = (counterall / 11.00); public static void Auswertung() { Und hier sage ich ja quasi dass die variable "prozent" der variable "counterall" (z.B. 9) / 11.00 (extra im double-Format zur Sicherheit^^) entsprechen soll. Müsste doch also eigentlich gehen oder nicht ?
  13. Dieser Part stammt noch von der alten Version der Auswertung, habe das mittlerweile aus dem code entfernt. Der part führt die Methode in der anderen Klasse aus. Also die IF-Abfragen und das hochzählen der gesamtpunktezahl. Damit soll er sich den Counter in der Form1 ansehen, und wenn dieser den Wert 2 hat den Gesamtpunktecounter hochzählen. Also ja. Dazu vllt. eine kleine Erklärung: Jede Checkbox entspricht einem Zahlenwert. Bei jeweils 5 Checkboxen pro Frage ergeben sich die Werte: 1,2,4,8,16 . Dieses System ermöglicht es Rückschlüsse auf die gegebenen Antworten zu ziehen. Beispielsweise wenn bei Frage 1 die Antwortmöglichkeit 1 und 3 ausgewählt wurde, so ergibt sich der Zahlenwert 5 (1+4). Das soll mir am ende dabei helfen die falschen Antworten zu finden. @arlegermi Das habe ich ausprobiert, allerdings verstehe ich nicht, wozu das gut sein soll? Dieses aufrufen mache ich bereits an einer anderen Stelle und zwar immer am ende einer Form z.B. hier: this.Hide(); Form7 f7 = new Form7(); f7.ShowDialog(); Es ging mir ja nur darum auch Zugriff auf die variablen in diesen Formen zu bekommen von einer anderen klasse aus. Das hat bereits funktioniert indem ich die variable einfach public static gemacht habe. Ich bin noch ziemlich am Anfang mit dem programmieren wie man hier vllt. deutlich merkt. Diese Begriffe wie dependency-injection etc. sagen mir auch nicht wirklich etwas bzw. wie genau das funktioniert müsste ich googeln. Mein Plan war erst einmal das Ding - irgendwie - zum laufen zu bringen und dann zu schauen was man alles noch vereinfachen kann. Denn ständig den Plan über den Haufen zu werfen weil es ja anders irgendwie leichter wäre und dann völlig anders an die Sache heran zu gehen verwirrt eher als das es hilft. Also insofern suche ich zunächst Antworten auf die - mehr oder minder - präzisen Fragestellungen die ich habe. Zum Beispiel: warum zum Geier gibt er mir bei dem Prozentwert ständig nur eine " 0 " zurück statt das Ergebnis ( 9 / 11 ) als double anzuzeigen wie ich es ihm eigentlich gesagt habe^^ ? Hoffe das ist ein wenig verständlicher. Gebt mich nicht zu schnell auf
  14. Also vielen Dank erst einmal für die schnellen Antworten. @arlegermi Das hat tatsächlich geholfen. Mir ist es wichtig das ganze erst einmal zum laufen zu bringen bevor ich das Ding in irgendeiner Form optimiere. Ich bin mittlerweile schon ein wenig weiter und es ergibt sich direkt die nächste Frage.. ^^ Ich versuche aktuell die Auswertung meines Programms zum laufen zu bringen. Und zwar habe ich wie im Bild oben zu sehen diverse Multiple-Choice Fragen, deren checkbox-Status einen Zahlenwert liefert. Diesen versuche ich dann in der Auswertungs-Klasse auszulesen. Dabei kann ich mittlerweile auf die variablen aus anderen Forms zugreifen dank eurer Tipps. Diese Zahlenwerte werden dann in Punkte umgewandelt und es ergibt sich eine Endpunktzahl. Jetzt hatte ich mir überlegt, dass ich auch gerne den Prozentsatz anzeigen lassen möchte. Dazu folgender Code der Auswertungs-Klasse: public class Global { public static int counterall = 0; public static double prozent = (counterall / 11.00); public static void Auswertung() { Form1 Form11 = new Form1(); Form2 Form12 = new Form2(); Form3 Form13 = new Form3(); Form4 Form14 = new Form4(); Form5 Form15 = new Form5(); Form6 Form16 = new Form6(); Form7 Form17 = new Form7(); if (Form1.counter1 == 2) { counterall++; } else { MessageBox.Show("Antwort 1 leider falsch!"); } if (Form2.counter2 == 1) { counterall++; } else { MessageBox.Show("Antwort 2 leider falsch!"); } if (Form3.counter3 == 8) { counterall++; } else { MessageBox.Show("Antwort 3 leider falsch!"); } if (Form4.counter4 == 8) { counterall++; } else { MessageBox.Show("Antwort 4 leider falsch!"); } if (Form5.counter5 == 4) { counterall++; } else { MessageBox.Show("Antwort 5 leider falsch!"); } if (Form6.counter6 == 6 || Form6.counter6 == 2 || Form6.counter6 == 4) { counterall++; } else { MessageBox.Show("Antwort 6.1 leider falsch!"); } if (Form6.counter7 == 6 || Form6.counter6 == 2 || Form6.counter6 == 4) { counterall++; } else { MessageBox.Show("Antwort 6.2 leider falsch!"); } if (Form6.counter8 == 2) { counterall++; } else { MessageBox.Show("Antwort 6.3 leider falsch!"); } if (Form6.counter9 == 2) { counterall++; } else { MessageBox.Show("Antwort 6.4 leider falsch!"); } if (Form6.counter6 == 4) { counterall++; } else { MessageBox.Show("Antwort 6.5 leider falsch!"); } if (Form6.counter6 == 1) { counterall++; } else { MessageBox.Show("Antwort 6.6 leider falsch!"); } MessageBox.Show(counterall.ToString()); MessageBox.Show(prozent.ToString()); } } } So sieht aktuell die Auswertungs-Form aus: Und hier der Code dazu: namespace Zwischenprüfung_Anwendungsentwickler { public partial class Form7 : Form { public Form7() { InitializeComponent(); } private void label3_Click(object sender, EventArgs e) { } public void button1_Click(object sender, EventArgs e) { //Global g1 = new Global(); Global.Auswertung(); MessageBox.Show(Global.counterall.ToString()); textBox1.Text = Global.counterall + " Punkte / 11 Punkten"; //textBox2.Text = (Convert.ToDouble(Global.counterall / 11)) + " %"; textBox2.Text = Global.prozent + " %"; Global.counterall = 0; } } } Wie man unten sieht habe ich einen double "prozent" erstellt, der mir nun in der textbox2 angezeigt werden soll. Allerdings zeigt er mir ständig nur eine "0" an... Egal wie ich es versuche. Die variable "counterall" einfach in double zu konvertieren und anzeigen zu lassen habe ich auch versucht - vergeblich. Weiß jemand was ich falsch mache?
  15. Hallo Leute Ich habe mal wieder eine vermutlich einfache Frage. Aktuell bastele ich an einer Windows Forms Anwendung, die einen Quiz-Character hat. Idee des Programms: Ich möchte die Zwischenprüfung aus vergangenen Jahren für Anwendungsentwickler in elektronische Form bringen. Viele der Fragen sind Multiple-Choice - also recht einfach zu programmieren. Andere erfordern etwas mehr Kreativität. Es soll natürlich auch eine automatische Punkteauswertung am Ende geben, die mir meine Punktzahl, den Prozentsatz etc. per IHK-Schlüssel ausgibt. Eigentlich war die Idee eine extra Klasse zu erstellen, in der Ich diese Auswertung vornehme. Aktuell funktioniert die Auswertung so: Jede korrekt beantwortet Frage (korrekt ausgefüllte Checkbox) gibt einen Punkt. Dieser führt dazu, dass eine variable "Counter1" hochgezählt wird. Am ende unter der "Auswertung"-Klasse sollen die Counter einfach ganz normal addiert werden und führen zu einer Gesamtpunktzahl (Ich weiß es gibt bessere Ideen für die Auswertung, mir geht's nur erst einmal darum ein funktionierendes Konstrukt zu schaffen). Das ganze sieht dann ungefähr so aus: namespace Zwischenprüfung_Anwendungsentwickler { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int counter1 = 0; bool Answer1 = false; public void button1_Click(object sender, EventArgs e) { if (box2.Checked) { counter1++; } else if (box1.Checked == false && box3.Checked == false && box2.Checked == false && box4.Checked == false && box5.Checked == false) { MessageBox.Show("Du solltest schon etwas anklicken.."); } else { //MessageBox.Show(""); } this.Hide(); Form2 f2 = new Form2(); f2.ShowDialog(); } } } Das Problem: Wie man unschwer erkennen kann, habe ich für jede einzelne Frage eine neue Windows Form generiert. Das Führt natürlich dazu, dass ich in jeder einzelnen Form eine variable "Counter1", "Counter2" usw. angelegt habe. Diese werden auch hochgezählt bei korrekter Antwort. Allerdings möchte ich ja die Berechnung der Endpunktezahl in einer anderen Klasse durchführen.. Also meine Frage: Wie kann ich auf die variablen der einzelnen Forms zugreifen, um diese dann in einer anderen Klasse "Auswertung" zu addieren? wie kann ich generell auf andere Klassen zugreifen und deren Inhalte ausführen lassen? Danke schonmal im voraus.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...