C# Attributwerte bleiben erhalten nach schließen der Form

Raggygandalf

Ensign
Registriert
Dez. 2008
Beiträge
179
Hallo jungs ich bin gerade etwas am programmieren in C#

und wollte ein Zahlenraten spiel machen.

Form1 = Hier wird nur ein spiel gestartet und öffnet form 2, eine listbox zeigt die gespielten spiele an

Form2 = hier werden die zahlen eingegeben um die zufallszahl zu erraten.

Ich habe nun folgendes Problem:

Wenn ich ein spiel gewonnen habe oder beendet habe und eine neues spiel starte bleiben die attribute vom 1. spiel erhalten.
Soll heißen wenn ich im ersten spiel 5 von 10 versuchen benötigt habe habe ich im 2. spiel nur noch 5 und die zufallszahl ändert sich auch nicht.

In Java war es so das wenn ich ein Fenster ein 2. mal starte sich alles komplett neu initialisiert. Nur hier bleiben die Werte irgendwie erhalten


habe hier mal meinen Code von Form2 namens bitteraten angehangen.

Ich habe den 2 Attributen "versuche" und dem Objekt "spielspiel" beim beenden oder gewonnen spiel einfach die anfangswerte zugewiesen.
Geht zwar aber ich denke sehr gewurschtelt.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;


namespace Zahlenraten
{
    public partial class bitteraten : Form
    {
        private Spiel spielspiel = new Spiel();
        private int versuche = 10;
       
        
        public bitteraten()
        {
            InitializeComponent();
        }

        
        
        private void bt_ende_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void bt_raten_Click(object sender, EventArgs e)
        {
           
            int eingegeben =  Convert.ToInt32(this.tf_ratezahl.Text);
            
            
            this.versuche--;
            if (versuche > 0)
            {
                switch (this.spielspiel.setZahl(eingegeben))
                {
                    case 1:
                        this.lb_bitteraten.Text = "Zu klein!";
                        this.tf_ratezahl.Text = "";
                        break;
                      
                    case 2:
                        this.lb_bitteraten.Text = "Zu groß!";
                        this.tf_ratezahl.Text = "";
                        break;
                        
                    case 3:
                        MessageBox.Show("Gewonnen");
                        this.tf_ratezahl.Text = "";
                        Datenbank.spieleliste.Add(this.spielspiel);
                        this.versuche = 10;
                        this.spielspiel = new Spiel();
                        this.Close();
                        break;
                }

            }
            else
            {
                Datenbank.spieleliste.Add(this.spielspiel);
                MessageBox.Show("Sie haben leider verloren");
                this.versuche = 10;
                this.spielspiel = new Spiel();
                this.Close();
            }

            

        }
    }
}
 
Hallo,
dein Code ist sehr wirr.

Du wirfst Begrifflichkeiten durcheinander und hältst dich nicht an die C# Codierungskonventionen. Somit machst du es den C# Kundigen schwer deinen Code zu durchschauen.

Dein Problem ist eher die Architektur. Du versuchst löblicherweise Oberfläche und Daten/Logik zu trennen, aber trennst nicht sauber. So gehört z.B. dein Feld (Property ist in C# was anderes) "versuche" in deine Modelklasse "Spiel". Genauso die Logik die damit verbunden ist.

Wenn du das sauber löst, hast du ein funktionierendes Programm.

Greetz
hroessler
 
Zuletzt bearbeitet von einem Moderator:
Instanziierst du das zweite Fenster neu, wenn du es geschlossen hast und wieder öffnen willst?
Zeig mal den Code in dem du deine zweite Form öffnest.

nebenbei: Anfangsbuchstaben von Methoden sind in C# Großbuchstaben (und nicht wie in Java Kleinbuchstaben).
Das "this" vor den Variablen spielspiel und versuche kannst du weglassen (das ist verwirrend, vor allem aber auch, weil du inkonsequent damit bist, mal ist ein "this" vorhanden, mal nicht)
Klassennamen schreibt man am Anfang groß (auch in Java schreibt man Klassen am Anfang immer groß)
 
Zuletzt bearbeitet:
Ok Methoden gross ok. Und ja habe viel probiert und dann vergessen.

Aber genau das was du gefragt hast war es nun läuft das Programm danke schonmal.

So einfach kann es sein könnte mich selbst schlagen 😁
 
Zurück
Oben