C# Werte durch ButtonClick übergeben

Komani

Cadet 3rd Year
Registriert
Dez. 2007
Beiträge
40
Hi,

ich bin grade dabei einen kleinen Vokabeltrainer als Form-Anwendung zu erstellen. Es wird eine Vokabel durch Klick auf einen Button aus einem Array ausgelesen sowie deren Übersetzung. Die Vokabeln werden zufällig ausgegeben mithilfe einer Zufallszahl die die Position der Zeile angibt.

In dem Array steht in der ersten Spalte die Vokabel, in der zweiten die Übersetzung.
Gibt man die Übersetzung ein, kann man durck klicken eines weiteren Buttons die Vokabeln miteinander vergeleichen.

Problem:
Klicke ich auf den zweiten Button meint der Button er kann die durch das klicken des ersten Buttons erstellten Variablen nicht finden.

Zur veranschaulichung hier der Code.

void BtNeue_VokabelClick(object sender, EventArgs e)
{
//Array wird erstellt
string[,] liste;
liste = new string[2,100];
//Vokabeln im Array
liste[0,0] = "synchronize"; liste[1,0] = "synchronisieren";
liste[0,1] = "jumper"; liste[1,1] = "Steckbrücke";
.
.
.
liste[0,63] = "versus"; liste[1,63] = "gegen";
//Array Ende

//Zufallsfunktion wird erstellt
Random zufall = new Random();
//Zufallszahl i wird erstellt
int i = zufall.Next(1,63);
//i wird benutzt um Vokabel aus erster Spalte auszuwählen
txtVokabel.Text = liste[0,i];
//Variable wird mit obiger Vokabel geladen
string str_Trans;
str_Trans = liste[0,i];


}
void btPrüfenClick(object sender, EventArgs e)
{
if(str_Trans == liste[1,i])
txtBewertung.Text = "Richtig";
else
txtBewertung.Text = "Falsch";
}

Wie kann ich die durch klicken des ersten Buttons erstellte Variable für den zweiten Button verwendbar machen?
i, str_Trans, liste sind laut Fehlermedlung (CS0103) im aktuellen Konext nicht vorahnden.

Oder ist das sowieso der falsche Ansatz?
 
Zuletzt bearbeitet:
Hi, du scheinst da lokale Variablen und Attribute zu verwechseln. Lokale Variablen sind solche, die du innerhalb einer Methode deklarierst. Diese sind dann auch nur innerhalb dieser Methode sichtbar/existent. Attribute sind dagegen überall in der aktuellen Klasse oder auch darüber hinaus sichtbar.

Hab leider auch gerade kein Codebeispiel, da ich nur Java programmiere :P
Es ist wohl ratsam, dass du dich nochmal mit ein paar Grundlagen des Programmierens auseinandersetzt.
 
Zugegeben, ohne setter und getter zu arbeiten war nicht ganz so schlau :p

Habe nun das array in eine Klasse ausgelagert und habe die benötigten properties geschrieben.

Jetzt startet das Programm, nur die Prüfung will nicht klappen. Ergebnis ist immer falsch.
Hier nochmal der neue Code:

public void BtNeue_VokabelClick(object sender, EventArgs e)
{

Variablen V;
V = new Variablen();
txtVokabel.Text = V.Str_Vokabel;


}
public void btPrüfenClick(object sender, EventArgs e)
{
Variablen V;
V = new Variablen();

if(V.Str_Vokabel == V.Str_Trans)
txtBewertung.Text = "Richtig";
else
txtBewertung.Text = "Falsch";
}

Klasse Variablen:

//Properties
{
private string str_Trans;
private string str_Vokabel;
private int i;
private string liste;


public string Str_Trans
{
set{str_Trans = value;}
get{return str_Trans;}
}
public string Str_Vokabel
{
set{str_Vokabel = value;}
get{return str_Vokabel;}
}
public int I
{
set{i = value;}
get{return i;}
}
public string Liste
{
set{liste = value;}
get{return liste;}
}
//Array
.
.
.
//Zufallsfunktion wird erstellt
Random zufall = new Random();
//Zufallszahl i wird erstellt
i = zufall.Next(1,63);


str_Vokabel = liste[0,i];
str_Trans = liste[1,i];



Kennt jemand eine gute Seite mit C# Tutorien, speziell in Bezug auf Form-Anwendungen?
Das Buch aus dem ich lerne beschäftigt sich leider nur äußerst knapp und oberflächlich mit Form-Anwendungen usw.
 
Zuletzt bearbeitet:
Skuzzle schrieb:
Hi, du scheinst da lokale Variablen und Attribute zu verwechseln. Lokale Variablen sind solche, die du innerhalb einer Methode deklarierst. Diese sind dann auch nur innerhalb dieser Methode sichtbar/existent. Attribute sind dagegen überall in der aktuellen Klasse oder auch darüber hinaus sichtbar.

Hab leider auch gerade kein Codebeispiel, da ich nur Java programmiere :P
Es ist wohl ratsam, dass du dich nochmal mit ein paar Grundlagen des Programmierens auseinandersetzt.

Du verwechselst da Attribute mit Eigenschaften/Properties.
http://msdn.microsoft.com/de-de/library/z0w1kczw(v=vs.80).aspx
 
Das hier reicht schon um dein Vokabelprogramm zu realisieren

Code:
        string[,] vokabeln = new string[,] { { "Wurst", "Auto", "Boot" }, { "Sausage", "Car", "Boat" } };
        int vokabelNr = 0;
        
        private void BtNeueVokabel_Click(object sender, EventArgs e)
        {
            Random rnd = new Random();
            vokabelNr = rnd.Next(3);
            label1.Text = vokabeln[0,vokabelNr];
        }

        private void btPrüfen_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == vokabeln[1,vokabelNr])
                MessageBox.Show("Richtig");
            else
                MessageBox.Show("Falsch");
        }

Die dazugehörige Form hat ein Label "label1" wo die abzufragende Vokabel angezeigt wird, eine Textbox "textBox1" wo die Übersetzung eingegeben werden muss und 2 Buttons. einen für ne neue Vokabel und einen zum Prüfen.

Ich erkläre auch gern was dazu.

Das ist natürlich nur ne schnelle Lösung, die ich grad in 2 Minuten hingekrickelt habe. Das Füllen das Arrays kann man natürlich auch eleganter und vor allem dynamischer machen, aber ich denke das Ziel wird erreicht wenn man bloß 3 Vokabeln trainieren will :D

Dein Ursprüngliches Problem liegt übrigens darin, dass du die Arrayliste im Click-Ereignis des Buttons erstellst. Dieses Array ist dann nur genau in diesem Codeblock gültig. Wie du siehst, habe ich die Definition außerhalb dieser Codeblöcke durchgeführt. So können beide Click-Ereignisse auf die Vokabelliste zugreifen.
 
Zuletzt bearbeitet:
Zuerst einmal, setze ein paar Brakepoints am besten mal bei der if-Abfrage. Ich denke dann wirst du merken, wieso es nicht funktioniert ;).
Als zweites merke ich an, dass ich persönlich anstelle des WinForms direkt WPF lernen würde, da es so aussieht, dass die Unterstürzung seitens MS doch langsam zurückgeht. (Wenn ich das richtig sehe, ist z.B. die Erstellung eines Metro-Apps nur noch mit XML/XAML - "Kenntnissen" möglich)
Und zuletzt nützliche Links findest du natürlich im entsprechenden Thread ;)
 
Zurück
Oben