C# Bitte um Hilfestellung

Steelnight

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
295
Sehr geehrte CB-Community,

ich brauche eure Hilfe, im Moment brummt mir ehrlich gesagt der Kopf. Um C# zu lernen befolge ich ein Tutorial und bin im Moment an einer Aufgabe dran.

Folgenden Code habe ich schon geschrieben:

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

namespace Kapitel3_Spaß_mit_Tim_und_Tom
{
    partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Typ tim = new Typ();
            tim.Name = "Tim";
            tim.Geld = 50;

            Typ tom = new Typ();
            tom.Name = "Tom";
            tom.Geld = 100;
            int bank = 100;
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {

        }
        public void Formulaktualisierung()
        {
            label1.Text = tim.Name + " hat " + tim.Geld + "€";
            label2.Text = tom.Name + " hat " + tom.Geld + "€";
            label3.Text = "Die Bank hat " + bank + "€";
        }
    }
}

Den Code für die 2 Buttons nehme ich mir noch vor. Aber ich habe das Problem, dass wenn nach einer erfolgten Transaktion (Also Tom schiebt Beispielsweise per Klick, 10€ von seinem Kontingent zu Tim) die Labels aktualisiert werden sollen es nicht klappt.
Es kommen bei den letzten 3 Zeilen
Code:
label1.Text = tim.Name + " hat " + tim.Geld + "€";
            label2.Text = tom.Name + " hat " + tom.Geld + "€";
            label3.Text = "Die Bank hat " + bank + "€";
die Fehlermeldungen : Der Name "tim" ist im aktuellen Kontext nicht vorhanden.
Der Name "tom" ist im aktuellen Kontext nicht vorhanden.
Der Name "bank" ist im aktuellen Kontext nicht vorhanden.

Die Klasse Typ habe ich bereits erstellt, sie ist als public eingestellt und auch durchstrukturiert.

Ich habe keine Ahnung, was ich falschgemacht habe! Bitte erklärt mir, wo mein Fehler liegt.
Vielen Dank :)
 
out of scope.

Die Typen müssen in der Form1 deklariert werden.
private Typ _tim;
private Typ _tom;

im ctor() kannst du dann neue Objekte dazu erstellen.
_tim = new Typ { Name = "Tim", Geld = 50 };


...mit der bank wird es dir ähnlich gehen.
 
Du musst die Variablen "tim" und "tom" außerhalb der Form1()-Methode deklarieren. Alles was innerhalb einer Methode deklariert ist, ist auch nur in dieser sichtbar. Das sieht dann so aus:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Kapitel3_Spaß_mit_Tim_und_Tom
{
    partial class Form1 : Form
    {
        private Typ _tim;
        private Typ _tom;
        private int _bank;
        public Form1()
        {
            InitializeComponent();
            _tim = new Typ();
            _tim.Name = "Tim";
            _tim.Geld = 50;
 
            _tom = new Typ();
            _tom.Name = "Tom";
            _tom.Geld = 100;

            _bank = 100;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
 
        }
        public void Formulaktualisierung()
        {
            label1.Text = _tim.Name + " hat " + _tim.Geld + "€";
            label2.Text = _tom.Name + " hat " + _tom.Geld + "€";
            label3.Text = "Die Bank hat " + _bank + "€";
        }
    }
}

Ich würde dir auch empfehlen, dir das Thema Konstruktoren anzuschauen.
 
Generell kannst du Variablen die du definierst nur innerhalb der { } Klammern nutzen. Anders sieht das mit Klassenvariablen aus, welche du also innerhalb den { } der Klasse definierst, so wie zorty das geschrieben hat.

Lies dir auch noch etwas zur Sichtbarkeit durch, also warum man manches private oder public macht. Das zorty den Namen mit einem _ Unterstrich beginnen lässt ist Konvention und kannst du befolgen.
 
Ich bedanke mich bei euch und werde mich nochmal an das Thema setzen.

Da hab ich echt noch viel vor mir. Danke für die wirklich schnellen Antworten!

Lies dir auch noch etwas zur Sichtbarkeit durch, also warum man manches private oder public macht. Das zorty den Namen mit einem _ Unterstrich beginnen lässt ist Konvention und kannst du befolgen.

Macht man das mit den _ immer so ?
 
Nein, natürlich musst du das nicht mit dem "_" machen. Ich als C#-Entwickler mache es z.B. nie so, da es mir nicht gefällt. Ich halte mich an die Regel, das alles, was private, internal, etc. ist klein geschrieben wird, und alles, was nach außen hin sichtbar ist (also public) groß geschrieben wird.

Beispiel:

private int meineVariable;

public int MeineVariable {
get { return meineVariable; }
set { meineVariable = value; }
}

private void meineMethode()
{
}

public void MeineMethode()
{
}
 
Gibt es noch eine Möglichkeit diesen Code weiter zu vereinfachen ? :

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

namespace Kapitel3_Spaß_mit_Tim_und_Tom
{
    partial class Form1 : Form
    {
        private Typ _tim = new Typ();
        private Typ _tom = new Typ();
        private Typ _bank = new Typ();
        public Form1()
        {
            InitializeComponent();
            _tim.Name = "Tim";
            _tim.Geld = 50;

            _tom.Name = "Tom";
            _tom.Geld = 100;
            
            _bank.Name = "Bank";
            _bank.Geld = 100;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (_bank.Geld >= 10)
            {
                _tim.GeldEmpfangen(10);
                _bank.GeldVerleihen(10);
            }
            else
            {
                MessageBox.Show("Die Bank kann kein Geld mehr bereitstellen");
            }
            Formulaktualisierung();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (_tom.Geld >= 0)
            {
                _tom.GeldVerleihen(5);
                _bank.GeldEmpfangen(5);
            }
            else
            {
                MessageBox.Show("Tom hat kein Geld mehr");
            }
            Formulaktualisierung();
        }

        public void Formulaktualisierung()
        {
            label1.Text = _tim.Name + " hat " + _tim.Geld + "€";
            label2.Text = _tom.Name + " hat " + _tom.Geld + "€";
            label3.Text = "Die Bank hat " + _bank.Geld + "€";
        }
    }
}

Hat sich schon geklärt :).
 
Zuletzt bearbeitet: (Hat sich geklärt)
Zurück
Oben