Laden...

Zugriff auf Variable

Erstellt von Peter15 vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.658 Views
P
Peter15 Themenstarter:in
13 Beiträge seit 2005
vor 18 Jahren
Zugriff auf Variable

Hallo Jungs,
ich habe noch eine (hoffentlich 🙂 ) abschließende Frage zu meinem kleinen ersten jemals geschriebenen Programm:
Und zwar geht es um die Zeilen 59 und 311 des Quelltextes. Warum kann ich in der Zeile 311 nicht mehr auf die Zeile
59 zugreifen? Der sagt mir dann, daß die Variable box nicht exisitert. Aber warum? Ich checks nicht.
Ich danke Euch sehr herzlich für eine Antwort.
Viele Grüße Peter

830 Beiträge seit 2005
vor 18 Jahren

Hallo Peter15,

die Variable "box" ist eine lokale Variable der Funktion Main. In der Funktion "BSuchenClick" ist diese dann nicht gültig. Schau dir mal etwas über die Gültigkeitsbereiche von Variablen an.

Um die Variable nutzen zu können, musst du diese entweder globalisieren, oder du übergibst sie der Funktion als Parameter. Da es sich in deinem Fall um ein Ereignis handelt, würde ich dir raten die Variable zu globalisieren.

Gruss Friedel

Ohne Ziel ist auch der Weg egal.

#
88 Beiträge seit 2005
vor 18 Jahren

Box hast Du als lokale Variable im Konstruktor deklariert. Du kannst aber nicht aus einer Methode heraus lokale variablen die in einer anderen Methode oder einem Konstruktor deklariert werden auslesen.
Du musst sie also in die Klasse schreiben.

EDIT: da war wohl einer um ein paar Sekunden schneller 😁

Übrigens: In der Objektorientierung spricht man von Methoden und nicht von Funktionen. Konstruktoren sind keine Methode, auch wenn sie so aussehen.
Ich merke dass nur an, weil Peter15 noch kein Experte ist und nicht durch falsche Begriffe verwirrt werden soll.

563 Beiträge seit 2004
vor 18 Jahren

konstruktoren sehen nicht wie methoden aus, sie haben nämlich keinen rückgabeparameter! 😁

830 Beiträge seit 2005
vor 18 Jahren

Hallo #coder,

hast natürlich Recht, ist mir ja fast ein bischen peinlich, aber eben nur fast 😉

Ohne Ziel ist auch der Weg egal.

P
Peter15 Themenstarter:in
13 Beiträge seit 2005
vor 18 Jahren

Moin moin,
also ich dank Euch auf jeden Fall schon mal für die nette Hilfe. Aber es klappt irgendwie trotzdem net.
Ich hab jetzt die Zeilen 23 und 54 neu eingefügt, aber er findet nicht den Text, der jeweils gerade in der ComboBox
angezeigt wird? In Zeile 312 wird dann gesagt, daß die Datei /sprachen/.txt nicht gefunden werden kann. Das
heißt ja aber, daß die Variable box nicht "gefüllt" ist...
In dem Ordner Sprachen sind ein paar Textdateien mit den Dateinamen der jeweiligen Sprachen (Deutsch.txt, English.txt, usw)

Wenn Ihr mir da nochmal helfen würdet, wäre ich echt dankbar.
Viele Grüße, Peter

830 Beiträge seit 2005
vor 18 Jahren

Hallo Peter15,

so wie es bei kurzem drüberfliegen aussieht, convertierst du ein Object in einen String. Die ComboBox hat eine Eigenschaft Text, nimm mal die.

Gruss
Friedel

Ohne Ziel ist auch der Weg egal.

#
88 Beiträge seit 2005
vor 18 Jahren

Ich würde folgendes machen: (geändert ab Zeile 39)


//
// Auszug aus dem Konstruktor:
//
                        ComboBox CB = new ComboBox();
			CB.Location = new System.Drawing.Point(216, 32);
			CB.Name = "comboBox1";
			CB.Size = new System.Drawing.Size(120, 21);
			CB.TabIndex = 2;
			//zeile gelöscht: CB.Text = "Deutsch";
			
			CB.DropDownStyle = ComboBoxStyle.DropDownList; // zeile hinzugefügt
	
			try
			{
				DirectoryInfo di = new DirectoryInfo(ordner);
				FileInfo[] files = di.GetFiles();
				
				for (int u=0; u<files.Length; u++)
				{
					string datei = files[u].Name;
					string listentext = datei.Substring(0,datei.Length - 4);
					CB.Items.Add(listentext);
				}
				
				this.Controls.Add(CB);
				//zeile gelöscht: box = Convert.ToString(CB.SelectedItem);
				
                                // zeilen hinzugefügt:
				if(CB.Contains("Deutsch"))
					CB.SelectedItem = "Deutsch";
				else
					CB.SelectedIndex = 0;
			}

			catch (IOException ex)
			{
				MessageBox.Show("Fehler beim Ermitteln der Dateien: {0}.", ex.Message);
			}

Die Variable Box ist überflüssig. Du kannst sie mit

(string)CB.SelectedItem

ersetzen

P
Peter15 Themenstarter:in
13 Beiträge seit 2005
vor 18 Jahren

Hallo,
also erstmal echt herzlichen Dank für die Hilfe. Leider funktioniert es aber noch nicht. Das alte Problem ist nämlich noch da, und zwar, daß der unten (d.h. in der Funktion BSuchenClick die ComboBox anscheinend nicht mehr kennt. Es kommt folgende Fehlermeldung da immer:

c:\Dokumente und Einstellungen\Günther\Desktop\C#\kwr 1.0\MainForm.cs(313,48): error CS0246: The type or namespace name 'CB' could not be found (are you missing a using directive or an assembly reference?)

Woran könnte das liegen.
Herzliche Grüße, Peter

#
88 Beiträge seit 2005
vor 18 Jahren

Du musst auch die Combobox aus dem Konstrukor nehmen, damit sie in der gesamten Klasse sichtbar ist.

P.S. du hättest die Combobox auch mit dem Designer erstellen können, das spart etwas Schreibarbeit und man sieht gleich, wie es aussieht.