none
Checkbox Speichern C# RRS feed

  • Frage

  • Hallo erstmal also ich wollte jetzt von C++ in C# wechseln und habe versuch ein programm zu übernehmen was ich in C++ geschrieben bis jetzt bin ich klar gekommen google war mir eine große Hilfe :P

     

    Aber jetzt steck ich fest und zwar hier

    Diesen C++ Code wollte ich in C# übersetzen

      Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If CheckBox2.Checked() = True Then
          My.Settings.WoW = TextBox3.Text
          My.Settings.Save()
        Else
          My.Settings.WoW = ""
          My.Settings.Save()
        End If
        My.Settings.CB_save = True
        My.Settings.Save()

     

    So das hab ich daraus gemacht.


        private void Form1_Formclosing(object sender, FormClosingEventArgs e)
        {
          if (checkBox2.Checked == true)
            
          Properties.Settings.Default.WoWPfad = textBox3.Text;
          Properties.Settings.Default.Save();
    
          Properties.Settings.Default.CB_Save = true;
          Properties.Settings.Default.Save();
    
    
    
    
    
    
        }

     

     

    Aber komischerweise speichert mein Programm die Checkbox und den Text nicht was er jedoch im C++ Programm macht.

    hab den Code auch mehrmals schon umgeschrieben.

     

    Ich bin Langsam am verzweifeln.

     

    ich hoffe hier kann mir wer helfen.

     

    Sonntag, 20. Juni 2010 22:12

Antworten

  • Hallo,

    zunächst: was Du als C++ bezeichnest, ist in Visual Basic verfaßt.

    Und Deine "Übersetzung" ist für sich genommen bis auf die fehlenden Klammern richtig,
    auch wenn einmal Speichern hier ausreichend wäre:

    if (checkBox2.Checked == true)
    {   
       Properties.Settings.Default.WoWPfad = textBox3.Text;
       Properties.Settings.Default.CB_Save = true;
       Properties.Settings.Default.Save();
    }
    
    Nur muß es sich bei der Einstellung (WoWPfad, CBSave) um Benutzereinstellungen handeln
    (und keine Anwendungseinstellungen), denn nur die können zur Laufzeit verändert
    und gespeichert werden. Schau also mal unter den Projekt-Eigenschaften nach.

    Ein C# Beispiel mit weiteren Erläuterungen findest Du u. a. hier:
    http://www.codeproject.com/KB/cs/UserSettings.aspx

    Gruß Elmar

    Montag, 21. Juni 2010 08:04
    Beantworter
  • Hallo,

    nein mit der Express hat das nicht zu tun, genausowenig wie mit der Sprache -
    das .NET Framework ist überall gleich!
    Genausowenig wie es an Deinem unangemessenen Tonfall liegen dürfte ;-)

    Baue in Deinem Test-Formular ein Load-Ereignis:

        private void Form1_Load(object sender, EventArgs e)
        {
          textBox1.Text = Properties.Settings.Default.WoWPfad;
    
          // Erfordert einen Verweis auf System.Configuration.dll
          string configFileName = System.Configuration.ConfigurationManager.OpenExeConfiguration( 
            System.Configuration.ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
          
          if (!String.IsNullOrEmpty(configFileName))
          {
            Console.WriteLine("Pfad: {0}", configFileName);
            Console.WriteLine("Inhalt: {0}", System.IO.File.ReadAllText(configFileName));
          }
          else
          {
            Console.WriteLine("Keine Benutzerkonfiguration gefunden");
          }
        }
    
    Ein mögliches Problem ist, dass Benutzereinstellungen je Version gespeichert werden.
    Und wenn Du Deine Anwendung "verteilst" müssen Benutzereinstellungen via Upgrade
    mitgezogen werden. Was aber bei einem neuen Projekt -solange Du nicht überall
    dran rumgebastelst hast - nicht passiert.

    Meine Empfehlung: Teste Deinen Code an einem neuen Projekt!
    Funktioniert er, so übernehme ihn ins bestehende (so es denn lohnt)
    und tritt der Fehler wiederum auf, so prüfe, was Du sonst noch alles
    gemacht hast.

    Ein weiterer Link: Exploring Secrets of Persistent Application Settings

    Gruß Elmar

    Montag, 21. Juni 2010 10:25
    Beantworter
  • Hallo,

    an dem Code an sich ist nichts auszusetzen, wie (nach den den Korrekturen)
    auch an Deinem Ausgangsbeispiel.

    Nur wo glaubst Du die user.config zu finden?

    Sie wird nicht im Programm (BIN)-Verzeichnis gespeichert, sondern unter den
    lokalen Benutzerdaten. Das hatte ich versucht, mit dem kleinen Codeschnipsel
    zu ConfigurationManager.OpenExeConfiguration zu zeigen.

    Auch spielen dabei die Einstellungen unter den Assembly-Informationen
    wie CompanyName und ProductName eine Rolle.
    Und es ist ein Unterschied, ob Du die Anwendung im Debug-Modus oder
    als alleinstehende Anwendung ausführst. In allen Fällen wird ein neuer
    Pfadname für die Konfigurationsdateien erzeugt.

    Damit Du weiterkommst habe ich ein Beispielprojekt zusammengestellt:

    http://www.elmarboye.de/download/SaveSettings.zip

    beachte dass im Pfad u. a. mein Name vorkommt (was Du tunlichst ändern solltest)!

    Gruß Elmar

     

     

    Gruß Elmar

    Dienstag, 22. Juni 2010 08:23
    Beantworter
  • Fehler selbst entdeckt Form_Closing war nicht definiert in der Designer.cs .....

     

    Aber wie gesagt jeder anfang ist schwer ich bin neu in der sprache und will das ja lernen Elmar da musste die leutz nicht gleich demotivieren es gibt auch leute die lust haben was neues zu lernen und bei den sprüchen dann gleich aufgeben.

     

    Zum glück bin ich nich son Mensch :P

    • Als Antwort markiert ATTA92 Mittwoch, 23. Juni 2010 19:55
    Mittwoch, 23. Juni 2010 19:54

Alle Antworten

  • So nochmal alles upgecheckt er savt noch nicht mal eine User.config leutz bitte antwortet ma langsamm bekomm ich nen raste mit C#
    Montag, 21. Juni 2010 06:11
  • OK User.Congi ist jetzt da aber ist leer -.-
    Montag, 21. Juni 2010 06:33
  • Hallo,

    zunächst: was Du als C++ bezeichnest, ist in Visual Basic verfaßt.

    Und Deine "Übersetzung" ist für sich genommen bis auf die fehlenden Klammern richtig,
    auch wenn einmal Speichern hier ausreichend wäre:

    if (checkBox2.Checked == true)
    {   
       Properties.Settings.Default.WoWPfad = textBox3.Text;
       Properties.Settings.Default.CB_Save = true;
       Properties.Settings.Default.Save();
    }
    
    Nur muß es sich bei der Einstellung (WoWPfad, CBSave) um Benutzereinstellungen handeln
    (und keine Anwendungseinstellungen), denn nur die können zur Laufzeit verändert
    und gespeichert werden. Schau also mal unter den Projekt-Eigenschaften nach.

    Ein C# Beispiel mit weiteren Erläuterungen findest Du u. a. hier:
    http://www.codeproject.com/KB/cs/UserSettings.aspx

    Gruß Elmar

    Montag, 21. Juni 2010 08:04
    Beantworter
  • Hi ja das sind Benutzer einstellungen und die klammern hab ich auch hinzugefügt aber trotzdem funktioniert es nicht er speichert nix.
    Montag, 21. Juni 2010 08:06
  • Ich arbeite mit Visual Studio 2010 Express hat das vielleicht damit was zu tuen das das eine express version ist -.- Es kotzt mich nähmlich an das das nicht geht ohne die save funktion würde mein ganzes Programm nicht funktionieren.
    Montag, 21. Juni 2010 10:06
  • Hallo,
    Hi ja das sind Benutzer einstellungen und die klammern hab ich auch hinzugefügt aber trotzdem funktioniert es nicht er speichert nix.

    Wie stellst Du denn fest, dass nichts gespeichert wird?

    Wie sieht Deine Funktion zum Auslesen der Einstellungen aus?

    Und nein, mit der Express Edition hat das nichts zu tun.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Montag, 21. Juni 2010 10:25
    Beantworter
  • Hallo,

    nein mit der Express hat das nicht zu tun, genausowenig wie mit der Sprache -
    das .NET Framework ist überall gleich!
    Genausowenig wie es an Deinem unangemessenen Tonfall liegen dürfte ;-)

    Baue in Deinem Test-Formular ein Load-Ereignis:

        private void Form1_Load(object sender, EventArgs e)
        {
          textBox1.Text = Properties.Settings.Default.WoWPfad;
    
          // Erfordert einen Verweis auf System.Configuration.dll
          string configFileName = System.Configuration.ConfigurationManager.OpenExeConfiguration( 
            System.Configuration.ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
          
          if (!String.IsNullOrEmpty(configFileName))
          {
            Console.WriteLine("Pfad: {0}", configFileName);
            Console.WriteLine("Inhalt: {0}", System.IO.File.ReadAllText(configFileName));
          }
          else
          {
            Console.WriteLine("Keine Benutzerkonfiguration gefunden");
          }
        }
    
    Ein mögliches Problem ist, dass Benutzereinstellungen je Version gespeichert werden.
    Und wenn Du Deine Anwendung "verteilst" müssen Benutzereinstellungen via Upgrade
    mitgezogen werden. Was aber bei einem neuen Projekt -solange Du nicht überall
    dran rumgebastelst hast - nicht passiert.

    Meine Empfehlung: Teste Deinen Code an einem neuen Projekt!
    Funktioniert er, so übernehme ihn ins bestehende (so es denn lohnt)
    und tritt der Fehler wiederum auf, so prüfe, was Du sonst noch alles
    gemacht hast.

    Ein weiterer Link: Exploring Secrets of Persistent Application Settings

    Gruß Elmar

    Montag, 21. Juni 2010 10:25
    Beantworter
  • Hallo,

    nein mit der Express hat das nicht zu tun, genausowenig wie mit der Sprache -
    das .NET Framework ist überall gleich!
    Genausowenig wie es an Deinem unangemessenen Tonfall liegen dürfte ;-)

    Baue in Deinem Test-Formular ein Load-Ereignis:

     

      private
     void
     Form1_Load(object
     sender, EventArgs e)
      {
       textBox1.Text = Properties.Settings.Default.WoWPfad;
    
       // Erfordert einen Verweis auf System.Configuration.dll
    
       string
     configFileName = System.Configuration.ConfigurationManager.OpenExeConfiguration( 
        System.Configuration.ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
       
       if
     (!String.IsNullOrEmpty(configFileName))
       {
        Console.WriteLine("Pfad: {0}"
    , configFileName);
        Console.WriteLine("Inhalt: {0}"
    , System.IO.File.ReadAllText(configFileName));
       }
       else
    
       {
        Console.WriteLine("Keine Benutzerkonfiguration gefunden"
    );
       }
      }
    
    
    Ein mögliches Problem ist, dass Benutzereinstellungen je Version gespeichert werden.
    Und wenn Du Deine Anwendung "verteilst" müssen Benutzereinstellungen via Upgrade
    mitgezogen werden. Was aber bei einem neuen Projekt -solange Du nicht überall
    dran rumgebastelst hast - nicht passiert.

     

    Meine Empfehlung: Teste Deinen Code an einem neuen Projekt!
    Funktioniert er, so übernehme ihn ins bestehende (so es denn lohnt)
    und tritt der Fehler wiederum auf, so prüfe, was Du sonst noch alles
    gemacht hast.

    Ein weiterer Link: Exploring Secrets of Persistent Application Settings

    Gruß Elmar


    Hi Sorry mein Tonfall ist nicht böse gemeint meine rechtschreibung ist auch nicht die beste ich weiss xD

    Also nich glaich von mri böse nehmen wenn was negativ gemeint ist sage ich das direkt raus ich danke dir schonmal ich teste das jetzt mal

    Montag, 21. Juni 2010 20:11
  • Erstmall hab ich deinen Code benutzt hat wieder nicht geklappt habs dummerweise in meiner Haupt Datei benutzt und dannach konnt ich zie verschrotten xD Egal macht nix ist ja schnell wieder alles gemacht.

    Also hat nicht geklappt danach hab ich mal auf der seite die du mir verlinkt hast nachgelesen und ausprobiert.

     

    Hier ma der Code

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
          SaveToFile();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
          
          textBox1.Text = Properties.Settings.Default.Login;
          textBox2.Text = Properties.Settings.Default.PW;
          checkBox1.Checked = Properties.Settings.Default.CB_Save;
        }
    
        private void SaveToFile()
        {
          if (checkBox1.Checked == true)
          {
            Properties.Settings.Default.CB_Save = checkBox1.Checked;
            Properties.Settings.Default.Login = textBox1.Text;
            Properties.Settings.Default.PW = textBox2.Text;
            Properties.Settings.Default.Save();
          }
        }
    
      }
    }

    Leider war das auch kein erfolg bin wieder am anfang xD das funktioniert auch nicht also er erstellt noch nicht mal mehr die user.config.

     

    Langsam geht das mir auf den Sack :P

     

    Aber aller anfang ist schwer ne ^^

     

    vielleicht kannst du oder jemand anders ma gucken was man an dem Code verändern müsste das es Klappt das würde mir denk ich mal am meisten helfen.

     

    Ist nicht böse gemeint ich bin dankbarr für antworten ich probier auch alles aus. ^^

     

    Schonmal ein danke im vorraus.

    Montag, 21. Juni 2010 20:53
  • Hallo,

    an dem Code an sich ist nichts auszusetzen, wie (nach den den Korrekturen)
    auch an Deinem Ausgangsbeispiel.

    Nur wo glaubst Du die user.config zu finden?

    Sie wird nicht im Programm (BIN)-Verzeichnis gespeichert, sondern unter den
    lokalen Benutzerdaten. Das hatte ich versucht, mit dem kleinen Codeschnipsel
    zu ConfigurationManager.OpenExeConfiguration zu zeigen.

    Auch spielen dabei die Einstellungen unter den Assembly-Informationen
    wie CompanyName und ProductName eine Rolle.
    Und es ist ein Unterschied, ob Du die Anwendung im Debug-Modus oder
    als alleinstehende Anwendung ausführst. In allen Fällen wird ein neuer
    Pfadname für die Konfigurationsdateien erzeugt.

    Damit Du weiterkommst habe ich ein Beispielprojekt zusammengestellt:

    http://www.elmarboye.de/download/SaveSettings.zip

    beachte dass im Pfad u. a. mein Name vorkommt (was Du tunlichst ändern solltest)!

    Gruß Elmar

     

     

    Gruß Elmar

    Dienstag, 22. Juni 2010 08:23
    Beantworter
  • Hab zwar jetzt das geraft wie es funktionieren soll aber bei mir klappts doch wieder nicht xD er speichert immer noch nix ab -.-

    bei deinem upload hat er die user.config gespeichert.

    Also ich meine Genau das er überhaupt keine User.config speichert ich raff das echt nicht xD

     

    Ich wusste schon vroher wo er sie speichert aber leider hat er ja keine gespeichert und des macht der immernoch nicht.

     

    Langsam werde ich kire ich würde die sprache echt gern mit selbstversuchen lernen aber wenn noch nicht mal das geht hmm.

    sicher das es nicht an der Express version liegt ??? Oder gibt es irgendwo versteckt in den Application settings noch die checkbox beim herunterfahren speichern ??? die muss man ja bei 2008 express Visual Basic anhacken das My.Settings gesavt werden.
    Dienstag, 22. Juni 2010 17:36
  • Hallo,

    noch einmal: Es liegt nicht an .NET und auch nicht an den Express Editionen.
    Die CheckBox in den Visual Basic Einstellungen bewirkt nichts weiter als das
    bewußte Properties.Default.Save aufzurufen - C# Programmierer traut
    man zu, es selbst zu tun.

    Und willst Du wirklich Erfolge erzielen, suche die Fehler in Deinem Code -
    denn in 99,9 % (und mehr) aller Fälle hat man vermeintlichen Bugs selbst
    programmiert.

    Wenn Du Dich nicht mit C# anfreunden kannst, bleibe bei Visual Basic.
    Denn damit kann man genauso gute Programme schreiben.

    Gruß Elmar

    Mittwoch, 23. Juni 2010 07:04
    Beantworter
  • Hallo,

    noch einmal: Es liegt nicht an .NET und auch nicht an den Express Editionen.
    Die CheckBox in den Visual Basic Einstellungen bewirkt nichts weiter als das
    bewußte Properties.Default.Save aufzurufen - C# Programmierer traut
    man zu, es selbst zu tun.

    Und willst Du wirklich Erfolge erzielen, suche die Fehler in Deinem Code -
    denn in 99,9 % (und mehr) aller Fälle hat man vermeintlichen Bugs selbst
    programmiert.

    Wenn Du Dich nicht mit C# anfreunden kannst, bleibe bei Visual Basic.
    Denn damit kann man genauso gute Programme schreiben.

    Gruß Elmar


    Jeder anfang ist schwer.

     

    Ja der misst ist ja nur das ich einfach keinen fehler finde und auch der editor findet keine fehler das problem liegt wie gesagt dabei das er mi9r noch nicht mall einen ordner von der datei erstellt wodrine sich die user.config befindet.

    Mittwoch, 23. Juni 2010 18:47
  • in der app config wird von meinem MVB auch die definition name und serilizeAs nicht erkannt
    Mittwoch, 23. Juni 2010 19:03
  • Fehler selbst entdeckt Form_Closing war nicht definiert in der Designer.cs .....

     

    Aber wie gesagt jeder anfang ist schwer ich bin neu in der sprache und will das ja lernen Elmar da musste die leutz nicht gleich demotivieren es gibt auch leute die lust haben was neues zu lernen und bei den sprüchen dann gleich aufgeben.

     

    Zum glück bin ich nich son Mensch :P

    • Als Antwort markiert ATTA92 Mittwoch, 23. Juni 2010 19:55
    Mittwoch, 23. Juni 2010 19:54
  • Hallo,

    ich wollte Dich nicht demotivieren... verwechsle nicht die Hinweise darauf,
    dass Du an der  falschen Stelle suchst, damit.
    Und nein, ich klopfe mir nicht auf die Schulter, dass ich Recht gehabt hätte -
    das sind nur selbst gemachte Erfahrungen.

    Gruß Elmar

    Donnerstag, 24. Juni 2010 06:52
    Beantworter