Autor Beitrag
Geneesys
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Di 24.07.12 09:35 
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:
ausblenden C#-Quelltext
1:
2:
3:
4:
this.Hide(); // Versteckt nur Form 2 aber nicht Form1
this.Close(); // Schliest auch nur Form 2
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 user profile iconTh69: C#-Tags hinzugefügt
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
openFileDialog1.FileName = "Beispiel.txt"// voreinstellung des dateinamen
openFileDialog1.Filter = "Textdatei (*.txt)|*.txt|Alle Dateien|*.*"// voreinstellung der dateitypen
openFileDialog1.ShowDialog(); // öffnen das openfiledialog.
string name = openFileDialog1.FileName; // übergibt den pfad und nemen der datei in die variable name.
try
{
    StreamReader sr = new StreamReader(name); // öffnet die datei und liest sie in sr ("using System.IO;" benötigt)
    label1.Text = sr.ReadLine(); // liest die erste zeile aus und übergibt sie an label1
    label2.Text = sr.ReadLine(); // liest die nächste zeile aus und übergibt sie an label2
    sr.Close(); // schließt die datei und gibt sie wieder zur nutzung frei.
}
catch
{
    // wenn beim versuch des einlesen was nicht geklappt hat.
}

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

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke

Für diesen Beitrag haben gedankt: Geneesys
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: 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:

ausblenden volle Höhe 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if (Zeilen.Length < 2)
{
    MessageBox.Show("Die Datei ist ungültig.");
}
else
{
    // Die Zeilen verwenden
}



Bei Fragen, frag ;) ^^


Gruß

Für diesen Beitrag haben gedankt: Geneesys
Geneesys Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Mi 25.07.12 08:13 
Ich danke euch für eure Antworten hat soweit beides geklappt :D


DANKE

Gruß
Geneesys