Entwickler-Ecke
WinForms - 3 Formen | Zeilen aus .txt in ein label
Geneesys - Di 24.07.12 09:35
Titel: 3 Formen | Zeilen aus .txt in ein label
Guten Morgen zusammen,
Ich habe folgendes problem.
Ich habe 4 Formen
Die erste Form ist die Main-Form mit ihr rufe ich die 2te Form auf und von der 2ten Form Rufe ich die 3te auf.
Nun möchte ich wenn ich auf der 3ten Form die 4te aufrufe das Form 1,2 und 3 Beendet werden.
Habe schon alles mögliche ausprobiert o:
C#-Quelltext
1: 2: 3: 4:
| this.Hide(); this.Close(); this.dispose(); usw. |
Hätte da jemand eine Idee :D ?
Nun zu meiner 2ten Frage die eig auch wichtiger ist :P
Ich habe einen Button der "Laden" heist und wenn ich ihn klicke soll nach einer .txt auf C:\ gesucht werden. Die .txt soll man aber selber aussuchen können. Also: In dieser .txt datei steht in 2 Zeilen nur 2 Nummer:
Zeile1: 2500
Zeile2: 6000
Diese Beiden Zahlen möchte ich beim einlesen der .txt Datei in 2 labeln haben.
Weiß zufällig jemand wie ich label aus einer .txt Datei beschriften kann ? :/
Wäre euch sehr dankbar wenn ihr mir dabei helfen könntet.
Gruß
Geneesys
*Hust* :P
(Bitte vergesst nicht das ich immer noch anfänger binn)
Moderiert von
Th69: C#-Tags hinzugefügt
avoid - Di 24.07.12 19:50
ich kann dir leider nicht genau sagen wie das geht,
aber ich würde zunächst mal dafür sorgen das dein programm nicht beendet wird
wenn form 1 geschlossen wird.
das problem hatte ich mal als ich sowas versucht habe.
quasi das eigentliche programm ohne form und die 4 forms setzen darauf auf.
dann mußt du nur noch darauf achten das die forms beim aufrufen,
nicht als kind des vorherigen form gestartet werden.
sonst ist das beenden der mutter form geblockt.
soweit meine idee dazu.
hoffe dir kann wer helfen sowas um zu setzen.
---nachtrag---
wegen deiner zweiten frage:
wenn du mit VisualStudio arbeitest kannst du einen openFileDialog verwenden.
hier ein Beispiel von mir dazu:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| openFileDialog1.FileName = "Beispiel.txt"; openFileDialog1.Filter = "Textdatei (*.txt)|*.txt|Alle Dateien|*.*"; openFileDialog1.ShowDialog(); string name = openFileDialog1.FileName; try { StreamReader sr = new StreamReader(name); label1.Text = sr.ReadLine(); label2.Text = sr.ReadLine(); sr.Close(); } catch { } |
den code packst du einfach in dein klick event und passt ihn an.
nicht vergessen das du zum einlesen der datei "using System.IO;" brauchst.
ich hoffe das hilft dir etwas.
gruß, avoid
Palladin007 - Mi 25.07.12 02:19
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:
C#-Quelltext
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ß
Geneesys - Mi 25.07.12 08:13
Ich danke euch für eure Antworten hat soweit beides geklappt :D
DANKE
Gruß
Geneesys
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!