C#: Werte in andere Forms übertragen

OP #4839251
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
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!
OP #4839266
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? :/
Angehängte Dateien:
Gast #4839280
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
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();
OP #4839378
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!
Gast #4843213
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 ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.