Hallo liebe Gemeinde! für meine praktische Prüfung in Informatik mache ich eine Art "Fragenauswertung" Programm: Visual Studio Prinzip sieht folgendermaßen aus: Du beantwortest eine Frage, drückst bestätigen, das Fenster geht zu und ein neues Fenster mit der nächsten Frage erscheint usw. Bis man halt auf Auswerten drückt. Mein Problem liegt hierbei jedoch bei der Übergabe der Werte, ich häng seit heute 7:00 Uhr an den Problem :D Ich habe für jede Klasse eine Form und zusätzlich eine Klasse "Berechnung". In der Klasse Berechnung will ich alle Variablen zum Berechnen haben und diese anschließend mit Methoden verrechnen. Das soll jetzt aber nicht das Thema sein. Hier mal die relevanten Codestellen für 1 Frage und der Klasse Berechnung _________________________________________________________________ Form "Alter": public partial class Alter : Form { public Alter() { InitializeComponent(); l_age.Text = "Wie alt sind Sie " + Variablen.str_User + "?"; } #region Bestätigen private void b_confirmage_Click(object sender, EventArgs e) { Berechnung MyBerechnungAlter = new Berechnung(); MyBerechnungAlter.Alter = Convert.ToInt32(NUD_Age.Value); Zyklus MyZyklus = new Zyklus(); MyZyklus.Show(); this.Close(); } #endregion } Klasse "Berechnung": class Berechnung { /// <summary> /// Instanzvariablen /// </summary> private int i_BAlter; private int i_BZyklus; /// <summary> /// Konstruktor zum initialisieren der Instanzvariablen Alter und Zyklus /// </summary> public Berechnung() { i_BAlter = 0; i_BZyklus = 0; } #region Eigenschaften /// <summary> /// Eigenschaft zu Alter /// </summary> public int Alter { set { i_BAlter = value; } get { return i_BAlter; } } /// <summary> /// Eigenschaft zu Zyklus /// </summary> public int Zyklus { set { i_BZyklus = value; } get { return i_BZyklus; } } #endregion ); } _________________________________________________________________ Der Fehler liegt ja daran, dass ich immer wieder neue Objekte erstelle und Sie mit dne Setter und Getter nur mit der einen Variable füttere. Die Anderen Variablen bleiben 0; also beim Objekt MyBerechnungAlter ist i_BAlter mit einen Wert versehen, i_BZyklus jedoch nicht. bei MyBerechnungZyklus ist es genau umgekehrt. Zudem kann ich unter "Berechnungen" ja auch nicht darauf zugreifen, da beide in den Click-Events der anderen Forms sind, wie ich das verstanden habe. Ich bräuchte halt ein Objekt, welches am Ende jeden Wert hat, die ganzen Variablen müssen jedoch private bleiben. Alternativ würde auch gehen, dass ich die einzelnen Objekte in der Klasse Berechnung abfragen kann, was aktuell nicht geht. Hab auch schon versucht mit den Konstruktor zu arbeiten, also irgendwie die Werte der Setter und Getter auf den Konstruktor zu übertragen, was mir aber wohl nix hilft, da ich ja dann schon ein Objekt habe. Per Objektübergabe mit this hab ichs auch schon probiert, wieder nicht geklappt. Ich weiß, ich drücke mich ziemlich unklar aus, bin bezüglich Erklärungen geben echt nicht gut :) Wir programmieren erst seit diesem Semester mit C#, falls das weiterhilft. Grüße! :) Und schöne Feiertage!
:
Bearbeitet durch User
Schau Dir mal Sachen wie den "static"-Modifizierer an. Möglich wäre es vielleicht mit diesem un einer List<> zu arbeiten... Alternativ könntest Du vielleicht mit einem minimalen Datenbanksystem wie sqlite arbeiten ohne zusätzlich viel Aufwand zu betrieben. Kommt natürlich alles immer auf Deine Gegebenheiten an!
Mit static sollten wir laut Prof nicht arbeiten, wirkt sich aus irgend einem Grund negativ auf die Zensur aus. Mit Datenbanken habe ich noch keine Ahnung, unser derzeitiger Wissensstand geht bis ca 1.20 auf dem Bild Mit Basics für Anfänger werde ich hier wohl nicht weit kommen oder? :/
:
Bearbeitet durch User
Mh.. okay unter den Voraussetzungen muss Du natürlich mit weniger Auskommen. Ich würde es ganz simpel machen, indem ich mit "System.Windows.Forms.Form.ShowDialog()" arbeiten würde. Immer mit dem Rückgabewert die Funktion füttern und am Ende alles in die Klasse "Berechnung" übermitteln. Oder sprengt das auch wieder die Vorgabe vom Prof. ?
Ich denke nicht :) "Form.ShowDialog: Zeigt das Formular als modales Dialogfeld an." Was bedeutet das konkret?
Naja, Du hast doch geschrieben: "Du beantwortest eine Frage, drückst bestätigen, das Fenster geht zu und ein neues Fenster mit der nächsten Frage erscheint usw." Mit dem ShowDialog würde ich dann ca. so vorgehen:
1 | Form2 Frage1testDialog = new Form2(); |
2 | |
3 | if (Frage1testDialog.ShowDialog(this) == DialogResult.OK) |
4 | { |
5 | this.txtResult1.Text = Frage1testDialog.TextBox1.Text; //In der Form2 ist ein Control TextBox1, dieses enthält das erste Ergebnis |
6 | } |
7 | else |
8 | { |
9 | return: |
10 | } |
11 | |
12 | Form3 Frage2testDialog = new Form3(); |
13 | |
14 | if (Frage2testDialog.ShowDialog(this) == DialogResult.OK) |
15 | { |
16 | this.txtResult2.Text = Frage2testDialog.TextBox1.Text; //In der Form3 ist wieder ein Control TextBox1, dieses enthält das erste Ergebnis |
17 | } |
18 | else |
19 | { |
20 | return: |
21 | } |
22 | |
23 | //Dann die Berechnung füllen: |
24 | Berechnung MyBerechnungAlter = new Berechnung(); |
25 | MyBerechnungAlter.Frage1Value = this.txtResult1.Text; |
26 | MyBerechnungAlter.Frage2Value = this.txtResult2.Text; |
27 | MyBerechnungAlter.DoCalc(); |
28 | |
29 | textBoxResult.Text = MyBerechnungAlter.Eregbnis.ToString(); |
Alles klar, das kommt dann in die Klasse "Berechnungen", die ControlTextboxen dann in die Forms der jeweiligen Frage wie ich das verstanden habe. Ich probier das mal aus und lass euch vom Resultat wissen! Danke bis da hin Dominik!
Warum nicht einem Formular, das die Steuerelemente dynamisch erzeugt und alle Fragen Antworten etc. aus in ein Array Liste laden?
Sven L. schrieb: > Warum nicht einem Formular, das die Steuerelemente dynamisch erzeugt und > alle Fragen Antworten etc. aus in ein Array Liste laden? Weil das eine Idee ist, für deren Umsetzung dich jeder Programmierer wahlweise hassen oder bemitleiden würde ;)
HP schrieb: > Weil das eine Idee ist, für deren Umsetzung dich jeder Programmierer > wahlweise hassen oder bemitleiden würde ;) Wegen Warum? DB hat er noch nicht gehabt, und für jede Frage eine neue Form zu erstellen scheint auch nicht das Wahre? Deine Lösung würde wie aussehen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.