C# Programmier Problem

Hallo.
Ich will in ein Programm schreiben DAS WENN ICH EINEN BUTTON DRÜCKE DAS DIE VARIABLE EINS HÖHER geht:

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;

namespace Vocabeln_1._0
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)
{
int SpeicherZaehler = 0;
}

private void txtDeutsch_TextChanged(object sender, EventArgs e)
{

}

private void txtEnglisch_TextChanged(object sender, EventArgs e)
{

}

private void Speichern_Click(object sender, EventArgs e)
{

SpeicherZahler++;

}
}
}

Doch da steht immer :

Fehler 2 Der Name „SpeicherZahler“ ist im aktuellen Kontext nicht vorhanden. C:\Users\Buschmann\AppData\Local\Temporary Projects\Vocabeln 1.0\Form1.cs 38 13 Vocabeln 1.0

Und als warnung:

Warnung 1 Die Variable „SpeicherZaehler“ ist zugewiesen, ihr Wert wird aber nie verwendet. C:\Users\Buschmann\AppData\Local\Temporary Projects\Vocabeln 1.0\Form1.cs 22 17 Vocabeln 1.0

Hi,

ich habs zwar jetzt nicht ausprobiert aber versuchs mal so:

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;

namespace Vocabeln_1._0
{
public partial class Form1 : Form
{
int SpeicherZaehler;
public Form1()
{
InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)
{
SpeicherZaehler = 0;
}

private void txtDeutsch_TextChanged(object sender, EventArgs
e)
{

}

private void txtEnglisch_TextChanged(object sender, EventArgs
e)
{

}

private void Speichern_Click(object sender, EventArgs e)
{

SpeicherZahler++;

}
}
}

du hast nämlich nur eine lokale Variable in Form1_Load erzeugt - die kennt die andere Methode natürlich nicht. Wenn du aber die Variable nicht lokal deklarierst sondern stattdessen der Klasse zuordnest müsste es gehen.

Viele Grüße

Manny

Sorry
Leider funktioniert das immer noch nicht.

Hallo!

  1. Bitte hör’ auf zu schreien.
  2. Lies’ bitte ein Buch zu den Grundlagen objektorientierter Programmierung.
  3. Anschließend lies’ die Meldungen, die Du vom Compiler bekommst und versuche sie zu verstehen. Hinweis: Gültigkeitsbereich von Variablen.

Gruß,
Martin

Hi,

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;

namespace Vocabeln\_1.\_0
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 }

 private static int zahl = 0;

 private void Form1\_Load(object sender, EventArgs e)
 {
 }

 private void txtDeutsch\_TextChanged(object sender, EventArgs e)
 {
 }

 private void txtEnglisch\_TextChanged(object sender, EventArgs e)
 {
 }

 private void Speichern\_Click(object sender, EventArgs e)
 {
 zahl++;
 }
 }
}

sollte gehen nicht getestet.
Hier ein Buch: http://openbook.galileocomputing.de/visual_csharp_2010/
Und tu uns allen einen Gefallen und überleg dir einen besseren Titel.
Lg Knerd

Hallo Michael,

ich habe zwar nicht allzuviel Ahnung von C#. Aber du declarierst eine Variable Namens

SpeicherZaehler

versuchst aber später die Variable

SpeicherZahler

zu erhöhen, was nicht gehen kann, da sie nicht declariert ist!
Desweiteren versuchst du die Variable SpeicherZaehler in dem Form Load Ereigniss zu definieren. Das bedeutet das sie auch nur dort gültig ist. Versuchst du nun auf die Variable, aus einer anderen Function / Sub zuzugreifen, so geht dies nicht, das sie dort nicht bekannt ist!

Unter VB.Net kann man einstellen das eine Variablen Declaration erforderlich ist, sicherlich gibt es die Option unter C# auch. Einfach mal aktivieren und schon wirst du darauf hin gewiesen das da was faul ist :smile:

MfG Alex

Sorry
Leider funktioniert das immer noch nicht.

hoi,

analog zu den restlichen antworten, auch von mir die empfehlung lies ein grundlagen vermittelndes buch/tutorium.

nun noch mal zu deinem problem:

in der Load-methode deklarierst du die variable SpeicherZaehler und willst dann weiter unten im code auf diese zugreifen; woher soll denn dein programm jetzt wissen das du auf diese variable zugreiffen willst? denn deiner klasse ist keine variable dieses namens bekannt, sondern nur der load-methode!
das bedeutet also das du deiner klasse (am besten vorm konstruktor, wg. lesbarkeit) eine (private) int variable anlegst, und wegen mir, gleich oder erst in der load-methode initialisierst (z.b. mit null).

des weiteren besitzt visual-studio doch eine tolle erfindung namens IntelliSense, benutze sie doch einfach und du wirst nicht(unbedingt) mit deinen variablennamen durcheinander kommen (die variable SpeicherZahler ist deiner klasse erneut nicht bekannt->sie existiert einfach nicht).

ich hoffe das bringt dir etwas licht ins dunkel.

greetz, me