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
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.
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.
konstruktoren sehen nicht wie methoden aus, sie haben nämlich keinen rückgabeparameter! 😁
Hallo #coder,
hast natürlich Recht, ist mir ja fast ein bischen peinlich, aber eben nur fast 😉
Ohne Ziel ist auch der Weg egal.
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
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.
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
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
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.