C#: Werte in andere Forms übertragen

OP #4839251
Lesenswert?

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!
Gast #4839259
Lesenswert?

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!
Gast #4839280
Lesenswert?

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. ?
Gast #4839299
Lesenswert?

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();

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren