Zum ersten Problem:
Erstelle in jeder Form doch einen weiteren Konstruktor, der dann als Parameter die Form entgegen nimmt, die vorher geöffnet wurde.
Dann hast du in der Referenz der gestarteten Form die Referenz der Form, die aufgerufen hat und kannst dann direkt darauf zugreifen. Und damit hast du die Möglichkeit, sie zu schließen.
Also ungefähr so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65:
| public partial class Form1 : Form { public Form1() { InitializeComponent(); }
public void ÖffneForm2() { new Form2(this).Show(); } }
public partial class Form2 : Form { private Form Form1;
public Form2() { InitializeComponent(); } public Form2(Form Form1) : this() { this.Form1 = Form1; }
public void ÖffneForm3() { new Form3(this.Form1, this).Show(); } }
public partial class Form3 : Form { private Form Form1; private Form Form2;
public Form3() { InitializeComponent(); } public Form3(Form Form1, Form Form2) : this() { this.Form1 = Form1; this.Form2 = Form2; }
public void ÖffneForm4() { this.Form1.Close(); this.Form2.Close(); this.Close(); new Form4().Show(); } }
public partial class Form4 : Form { public Form4() { InitializeComponent(); } } |
Allerdings finde ich das sehr unpraktisch, also warte lieber noch ein oder zwei Tage, vielleicht hat jemand eine bessere Idee ^^
Zum zweiten Problem:
Da hat avoid Recht, der OpenFileDialog eignet sich am besten dafür.
Wenn du dann den Pfad hast, würde ich allerdings die
System.IO.File.ReadAllLines(DeinPfad); nehmen. Das Ergebnis ist ein Array und dann kannst du ganz simpel mit Index 0 und 1 die Zeilen abrufen. Die vorherige Überprüfung, ob diese Zeilen überhaupt da sein, solltest du allerdings schon mit einbauen, da dein Programm sonst abschmiert, wenn weniger als zwei Zeilen in der Datei stehen.
Das kannst du natürlich auch so machen, wie avoid gezeigt hat, also mit den
try { } catch { }-Blöcken den Fehler abfangen und behandeln, allerdings finde ich es besser, vorher mit if zu überprüfen, ob alles überhaupt funktionieren kann. Das lässt sich ganz einfach machen, nämlich so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if (Zeilen.Length < 2) { MessageBox.Show("Die Datei ist ungültig."); } else { } |
Bei Fragen, frag

^^
Gruß