C# kann Variable in der selben Klasse nicht benutzen?
Moin,
Bin grad dran einen Launcher zu erstellen und hab eine Funktion gemacht womit man eine Exe Datei wählen kann die als String Variable namens filePath gespeichert wird, wenn ich diese rufen will damit der Launch Button weiß was er starten soll bekomme ich den Error "Der Name "filePath" ist im aktuellen Kontext nicht vorhanden."
Wie kann ich hin bekommen das die Variable von der gesamten Klasse verwendet werden kann?
Code in Frage:
private void button8_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.InitialDirectory = "c:\\";
openFileDialog.Filter = "Exe Files (.exe)|*.exe"; ;
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
String filePath = openFileDialog.FileName;
textBox1.Text = filePath;
}
}
}
private void button7_Click(object sender, EventArgs e)
{
string WindowsUser = Environment.UserName;
string GameName = "Game";
System.Diagnostics.Process.Start($@"C:\Users\{WindowsUser}\AppData\Local\{GameName}\Saved\SaveGames.");
}
private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start($"{filePath}");
}
}
}
3 Antworten
Du hast den String innerhalb der Methode button8_Click deklariert, somit ist die Variable auch nur innerhalb dieser Methode sichtbar.
Deklariere sie außerhalb der Methode, also als Variable der Klasse. Dann ist sie auch in allen Methoden sichtbar.
________________________________
Wichtig für das Verständnis:
Deklarieren ≠ Initialisieren.
Deklarieren heißt die Variable "anlegen".
Initialisieren heißt, ihr einen Wert zuzuweisen. Dies kannst du nach wie vor in der Methode button8_Click tun. Aber sie muss eben vorher "angelegt" (deklariert) werden.
Wo wird die varibale fielPath den deklariert?
Da versuchst du ja eber den Text der textBox1 auf den Wert von filepath zu setzen. Aber woher kommt filePath?
Oh man, habe ich wohl übersehen. Aber liegt der Fehler dann in dieser Zeile?
System.Diagnostics.Process.Start($"{filePath}");
Habs schon hingekommen, das Problem war das die Variable bei Button8 deklariert war und somit nur bei Button8 sichtbar war, ich hab sie jetzt direkt am Klassenanfang unter public partial class Launcher : Form gesetzt und jetzt funktioniert es.
Das wäre auch meine Vermutung gewesen, dass die Variable nur Funktionslokal war ;)
Deine Variable "filePath" existiert momentan nur innerhalb der if-Abfrage, in der du sie auch deklariert hast.
Es gibt einen Unterschied zwischen lokalen und globalen Variablen.
Lokale Variablen existieren nur innerhalb des Paares an geschweiften Klammern, in denen sie deklariert/initialisiert werden. Also in deinem Fall "stirbt" die Variable nach der if-Abfrage.
Globale Variablen existieren in der kompletten Klasse und können auch von allen Methoden genutzt (lesend und schreibend, wenn nicht anderweitig abgesichert) werden.
Aber wie löst du jetzt dein Problem?
Naja, du musst dir überlegen wie du diese Variable am sinnvollsten sicherst. Du könntest die Variable global machen, sie in einer Textdatei zwischenspeichern, usw.
Da musst du dir einfach ein paar Gedanken machen wie du die Variable am besten sicherst und sie dabei auch noch vor unerwünschten Zugriffen schützt (Stichwort: Geheimnisprinzip).
Viel Erfolg!
Bei dem If bei Button8:
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
String filePath = openFileDialog.FileName;
textBox1.Text = filePath;