Laden...

Inhalt der TextBox wird erst nach 2maligem Beenden des Programms in eine .txt-Datei gespeichert

Erstellt von Dan90 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.585 Views
D
Dan90 Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren
Inhalt der TextBox wird erst nach 2maligem Beenden des Programms in eine .txt-Datei gespeichert

Hallo Leute, ich habe eine kleines Problem mit den TextBoxen in Windows- Forms.
Ich habe eine kleines Programm geschrieben mit einer Hauptform, diese besitzt 11 Unterpunkte auf denen jeweils wieder neue Forms aufgehen (Inhalten von diesen werden einwandfrei abgespeichert) , jedoch gibt es auf diesen Forms2 Radiobuttons mit denen wieder neue Forms aufgehen (Forms3). Und da liegt das Problem: Um die Inhalte dieser Forms3 die dann auf der "dritten Ebene" sind zu speichern, muss ich das Programm 2 mal beenden und wieder starten dass diese in die .txt-Datei mit gespeichert werden.

Hier mein Code

Hauptform


namespace Version1
{
 public partial class Menü : Form
    {
Form_C1 FormC1;

 SortedList Details = new SortedList();

 public Menü()
        {
            InitializeComponent();
FormC3 = new Form_C3();

}

  private void Speichern_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
            saveFileDialog1.Title = "Speichern unter";
            saveFileDialog1.ShowDialog();


            if (saveFileDialog1.FileName != "")

            if (Vorgaben.RB_C3J.Checked)                                                   // C3
            {
                Details.Add("C 3.1 Welcher Lack:", FormC3.TB_C3.Text);
                Details.Add(Vorgaben.LB_C3.Text, Vorgaben.RB_C3J.Text);
                Details.Add(FormC3.LB_C3.Text, FormC3.TB_C3.Text); 


          }
            else if (Vorgaben.RB_C3N.Checked)
            {
                Details.Add(Vorgaben.LB_C3.Text, Vorgaben.RB_C3N.Text);
                         }
            else
            {
                Details.Add(Vorgaben.LB_C3.Text, Vorgaben.RB_C3R.Text);
                         }}

Forms2: Ist im Grunde genau nach dem gleichen Schema wie Forms3 Programmiert

Forms3:

namespace Version1
{
    public partial class Form_C3 : Form
    {
        TextBox tbform_C3;
        
        
        public Form_C3()
        {
            InitializeComponent();
        }

         public Form_C3( ref  TextBox tb  )
        {

             tbform_C3 = tb;

            InitializeComponent();
        }

         private void C3_OK_Click(object sender, EventArgs e)
         {
             this.Hide();
         }

private void Form_C3_Load(object sender, EventArgs e)
  {
            TB_C3.Text = Properties.Settings.Default.TB_C1Save;
        }
private void Form_C3_FormClosing(object sender, FormClosingEventArgs e) 
   {
            Properties.Settings.Default.TB_C3Save = this.TB_C3.Text;

            Properties.Settings.Default.Save();
        }}

Hoffe dass mir jemand weiter helfen kann! Vielen Dank schon mal im Voraus!!!!

Hinweis von Coffeebean vor 9 Jahren

Code-Tags angepasst. Bitte verwende entsprechende Code-Tags.
[Hinweis] Wie poste ich richtig? Punkt 6

74 Beiträge seit 2014
vor 9 Jahren

So auf die Schnelle sehe ich, dass du in deiner Form_C3 im Load- und im FormClosing-Handler unterschiedliche Properties der Settings verwendest. Möglicherweise liegt es daran.

Aber ich glaube es wäre ohnehin besser, das ganze neu zu machen. Tu dir dabei selber einen Gefallen und gib deinen Steuerelementen und Klassen sprechende Namen. Achte insbesondere auch darauf, Daten, Logik und GUI auseinanderzuhalten.

D
Dan90 Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren

Oh das war ein copy paste Fehler, sorry. Das ganze neu programmieren geht leider nicht dass es insgesamt über 40 Forms sind und es bis Freitag fertig sein sollte 😕 .

P
157 Beiträge seit 2014
vor 9 Jahren

Du quälst dich wohl selbst gern 😃

kannst du das verhalten genauer beschreiben, da deine fehlerbeschreibung sehr unpräzise ist. Werden die Einträge gar nicht erstellt oder nur die Änderungen nicht gespeichert ?

Ich glaube eher dass dein Problem in der übertragung der Werte aus deinen Formularen liegt, als dass diese nicht gespeichert werden.

Prüfe nach welche Werte beim Speichern vorhanden sind und dann mach dich auf die Suche nach dem bösen Buben der dir das Leben schwer macht, ist meist der Mensch der n halben Meter vom Monitor entfernt sitzt 😉

Vielleicht kommt einfach die Änderung deiner Textbox durch irgendeine Bedingung oder einem Copy-Paste fehler nicht da an wo du es erwartest. Computer machen nie das was sie sollen, nur das was man ihnen befiehlt, - hüte dich vor deinen befehlen, sie könnten in erfüllung gehen -

vg

Wenn's zum weinen nicht reicht, lach drüber!

5.658 Beiträge seit 2006
vor 9 Jahren

Hi Dan90,

Oh das war ein copy paste Fehler, sorry.

Hast du den Code jetzt berichtigt, oder ist der Fehler immernoch im ersten Beitrag enthalten?

Das ganze neu programmieren geht leider nicht dass es insgesamt über 40 Forms sind und es bis Freitag fertig sein sollte 😕 .

Wie testest du denn deinen Code eigentlich, oder anders gefragt, wie kannst du überhaupt sicherstellen, daß das Programm am Freitag funktioniert?

Meine Leseempfehlung: [Artikel] Drei-Schichten-Architektur und [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio.

Christian

Weeks of programming can save you hours of planning

F
10.010 Beiträge seit 2004
vor 9 Jahren

Wenn ich mir den Code und die Aussagen anschaue, denke ich das da garnichts geplant oder getestet wird, und Grundlagen zu .NET oder OOP sind auch nicht wirklich zu erkennen.

D
500 Beiträge seit 2007
vor 9 Jahren

Moin!

ich habe gesehen, dass Du die Instanz von Form_C3 (wird in "Menue" erzeugt) beim Klick auf OK in derselbigen form "versteckst" (Hide aufrufst). Wird denn bei Hide() ueberhaupt das Event FormClosing ausgeloest?

Gruss,
DaMoe

D
Dan90 Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren

Also, wenn ich das debugging starte, dann gebe ich einen Text in die Textbox ein, dieser bleibt auch erhalten wenn ich die "forms3" öffne und wieder schliesse. Wenn ich dann speichern unter mache wird dieser Text aber nicht abgespeichert. Dann beende ich das debuggen und debugge erneut, der Text ist in der jeweiligen Textbox aber immernoch erhalten, wenn ich jetzt erneut speichern unter mache, und absolut nichts an dem Text geändert habe, wird dieser nun in meine txt-Datei gespeichert. Heißt die speicherung in meine Textdatei wird erst möglich wenn ich das Programm ein mal komplett beende. Habe es jetzt auch den Hide-Befehl durch einen Close-Befehl ersetzt, aber ist genau das gleiche....


namespace Version1
{
    public partial class Form_C3 : Form
    {
        TextBox tbForm_C3;
        
        public Form_C3()
        {
            InitializeComponent();
        }
            public Form_C3( ref  TextBox tb  )
        {

             tbForm_C3 = tb;

            InitializeComponent();
        }

            private void C3_OK_Click(object sender, EventArgs e)
            {
                this.Close();
                
            }

            private void Form_C3_Load(object sender, EventArgs e)                                  // Die gespeicherten Daten werden geladen, sobald das Fenster geöffnet wird 
            {
                TB_C3.Text = Properties.Settings.Default.TB_C3Save;
            }

            private void Form_C3_FormClosing(object sender, FormClosingEventArgs e)                // Die Eingaben werden gespeichert, sobald das Fenster geschlossen wird 
            {
                Properties.Settings.Default.TB_C3Save = this.TB_C3.Text;
                
                Properties.Settings.Default.Save();
            
            }    }
}

16.835 Beiträge seit 2008
vor 9 Jahren

Du sollst pre Debugging schauen, ob Du überhaupt an den Stellen, an denen Du es Dir vorstellst, in die Methode Form_C3_FormClosing kommst.

Was Du mit

Wenn ich dann speichern unter mache wird dieser Text aber nicht abgespeichert. meinst ist für mich nicht nachvollziehbar.
Rein von dem was Du an Code zeigst stimmt das theoretisch das, was passiert.

Auch was Du für eine Textdatei meinst ist mir nicht klar, denn die .NET Settings werden per default in XML-Dateien gespeichert, nicht in Text-Dateien.
Vor allem gibt's da kein Speichern unter, sondern die Einstellungen landen i.d.R. im Benutzerverzeichnis.

D
Dan90 Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren

Wie du oben im ersten Beistrag sehen kannst habe ich ein savefiledialog mit speichern unter Funktion in eine txt-Datei eingefügt, der Text in den Textboxen bleibt jederzeit erhalten wenn ich ihn nicht ändere. Nur der Text wird erst nach 2maligem schließen des Programms in die txt Datei gespeichert.

16.835 Beiträge seit 2008
vor 9 Jahren

Also ich kann Dir nich folgen.
Ich sehe nirgends eine Form2 und auch keinerlei Code, die eine (Text-)Datei speichern soll.

Nur eine untypisierte SortedList, deren sinn ich auch nirgends seh, finde ich.

T
67 Beiträge seit 2010
vor 9 Jahren

Dein "Speichern" oben macht irgendwie nichts.
Du öffnest zwar den SaveFileDialog aber das war es dann auch schon. Zumindest ist in deinem schlecht formatierten Codeschnipsel nicht wirklich mehr.

Deine erste if Anweisung läuft völlig ins leere (wohl beim Copy & paste eines Beispielcodes zu viel raus gelöscht?)
Danach füllst Du zwar deine SortedList aber was dann? Weiter machst Du hier nichts. Wo genau soll dein Code deine SortedList als Textdatei speichern oder hast Du das absichtlich nicht geposted?

Übrigens empfinde ich es als schlechten Programmierstil eine SortedList ohne Key & Valuetypen zu deklarieren. Dazu kommt noch, dass Du ungeprüft Werte in selbige schreibst. Wenn Du einen bereits vorhandenen Schlüssel noch mal hinzu fügst fliegt dir das ganze mit einer Exception um die Ohren.

Wie weit kommst Du im Code? Debugger? Irgendwo muss ja das eigentliche "speichern" in deinem Code sein sonst würde dein Programm ja keine Textdatei erstellen. Mit dem Debugger würdest Du erkennen wieso dein Programm beim "Speichern_Click" eben nicht das macht was Du erwartest.

Für mich sieht das alles sehr nach fehlenden Grundlagen aus.