Entwickler-Ecke

WinForms - Eine Methode wird nur einmal ausgeführt


Csharp-programmierer - Do 23.02.17 16:46
Titel: Eine Methode wird nur einmal ausgeführt
Hallo ihr Experten,
ich habe ein Problemchen. Der Benutzer soll einen Pfad angeben, anschließend ermittelt das Programm alle Dateien und erstellt pro Datei eine TabPage:


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:
private void Test() {
                foreach (var file in files)
                {
                    CreateTabPage(file);
                }
}
private void CreateTabPage(string file)
        {
            try
            {
                TabPage tabPage = new TabPage(Path.GetFileName(file));
                RichTextBox richTextBox1 = new RichTextBox();
                using(var file = new StreamReader(file))
                {
                    richTextBox1.Text = file.ReadToEbd();
                    file.Close();
                }
                tabPage.Controls.Add(richTextBox1);
                this.tabControl1.TabPages.Add(tabPage);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message, "Hier");
            }
        }


In dem Projektpfad habe ich ca 10 Dateien, anhand von MessageBoxen habe ich ermittelt, dass die Schleife 10 mal durchlaufen wird, die Methode aber nur einmal aufgrufen wird. Woran kann das liegen?


Delete - Do 23.02.17 17:17

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Do 23.02.17 17:40

Oh hupps, ich habe den Quelltext nicht kopiert. Der StreamReader hat einen anderen Variablennamen als file


Ralf Jansen - Do 23.02.17 17:49

Zitat:
Oh hupps, ich habe den Quelltext nicht kopiert.


Wenn du hilfe möchtest solltest du das aber noch tun.


Csharp-programmierer - Do 23.02.17 18:00

Ok, sorry


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:
private void CreateScintillaToTabControl(string file)
        {
            try
            {
                TabPage tabPage = new TabPage(Path.GetFileName(file));

                // Scintilla Instanzieren und Grundeinstellungen anpassen
                Scintilla scintilla = new Scintilla();

                using (StreamReader reader = new StreamReader(file))
                {
                    scintilla.Text = reader.ReadToEnd();
                    reader.Close();
                }

                tabPage.Controls.Add(scintilla);
                this.tabControl1.TabPages.Add(tabPage);

                MessageBox.Show("A");
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message, "Hier");
            }
        }


Und diese Methode wird in der Schleife gefeuert, aber bei 10 Einträgen, wird die Methode nur einmal ausgeführt


Ralf Jansen - Do 23.02.17 18:15

Du has das debugged, gesehen das er durch die Schleife geht, aber nicht in die Methode springt?


Csharp-programmierer - Do 23.02.17 18:25

Genau


Ralf Jansen - Do 23.02.17 18:29

Ehrlich gesagt glaube ich das nicht.


Csharp-programmierer - Do 23.02.17 18:32

Naja ich habe in die Schleife eine MessageBox eingebaut. Die kam 10 Mal. Dann habe ich in die Methode eine MessageBox eingebaut, die kam aber nur ein mal. Dann habe ich das Projekt gedebugt (Debuggen -> Einzelschritt), dann hat er mir alle Zeilen in dem Designer markiert, bis dann das Programm startete, und ab dann konnte ich den Code nicht mehr sehen. Ich habe aber auch in der Ausgabe geguckt, da kamen auch keine Fehler


Ralf Jansen - Do 23.02.17 19:04

Setze einen Breakpoint auf die Zeile mit dem CreateScintillaToTabControl Methodenaufruf in der Schleife. Drücke in Visual Studio F5 und klickt dich durch deine Anwendung bis du an diesen Breakpoint stößt. Jetzt klick F11 (F11 heißt geh in diese Methode). Der Debugger sollte in deine CreateScintillaToTabControl Methode wechseln, jetzt klicke wieder F5. Damit sollte der Code weiterlaufen bis du wieder auf deinem Breakpoint landest. Nun wieder F11 klicken und schauen ob du in der Methode landest.

Wenn du nicht 2mal in der Methode landest hätte ich dafür gern ein kompilierbares Beispiel Project mit dem Verhalten als Anhang zum selber überprüfen. Wenn du zum 2.ten mal in der Methode landest drücke F10 für Einzelschrittausführung, schaue dir an was passiert und wiedererhole die F10 Einzelschritte bis was passiert das nicht deinen Erwartungen entspricht schau in die beteiligetn Variablen was da drin steht vergleiche es mit deinen Erwartungen und schließe deine Schlüsse daraus.


Delete - Do 23.02.17 22:33

- Nachträglich durch die Entwickler-Ecke gelöscht -