Announcement

Collapse
No announcement yet.

Wie kann man am besten Variablenwerte speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann man am besten Variablenwerte speichern

    Hallo
    Ich hatte erst die Properties, in der man ganz einfach die Werte für Variablen speichern kann. So weit so gut. Doch dann habe ich gemerkt, dass wenn man das Programm ohne Debugger startet, man nicht an die Werte dafür rankommt. Ich habe das Programm nun noch mal neu designed und schon angefangen den Quellcode zu schreiben. Ihr müsst euch vorstellen, wenn die Anwendung gestartet wird, über das Load-Ereignis geprüft wird, ob der Ordner, den die Anwendung erstellt hat, existiert. Das hane ich so gelöst:

    Code:
    string s = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "MaiLet Professional Webstudio 2016");
                    if (!Directory.Exists(s))
                    {
                    }
    Und die ganzen Unterordner werden so erstellt:
    Code:
    string yxx = Path.Combine(xxy, "HTML");
                if (!Directory.Exists(yxx))
                {
                    Directory.CreateDirectory(yxx);
                    sTags_HTML = yxx;
                }
                else
                {
                    sTags_HTML = yxx;
                }
    
                string zxx = Path.Combine(xxy, "CSS");
                if (!Directory.Exists(zxx))
                {
                    Directory.CreateDirectory(zxx);
                    sTags_CSS = zxx;
                }
                else
                {
                    sTags_CSS = zxx;
                }
                string xqx = Path.Combine(xxy, "JavaScript");
                if (!Directory.Exists(xqx))
                {
                    Directory.CreateDirectory(xqx);
                    sTags_JS = xqx;
                }
                else
                {
                    sTags_JS = xqx;
                }
    Usw. Irgendwie erscheint mit dieser Algorithmus als unangebracht für sowas. Zumal ich die Werte für Booleans, Color und Font über
    Code:
    streamWriter1.WriteLine(bool1.ToString());
    speichern möchte. Wenn der Benutzer nun aber einen Ordner löscht, funktioniert die Application nicht mehr 100%, was ich natürlich vermeiden möchte. Gibt es hier eine bessere und zugleich kompfortablere Lösung?

  • #2
    Du kannst Daten
    in der Registry
    in den App-Settings
    speichern

    Wenn der Benutzer nun aber einen Ordner löscht, funktioniert die Application nicht mehr 100%, was ich natürlich vermeiden möchte.
    Es ist deine Aufgabe dafür zu sorgen, dass wenn die externen Daten - aus welchem Grund auch immer - nicht vorhanden sind, deine Anwendung trotzdem mit Defaultwerten startet.
    Christian

    Comment


    • #3
      http://www.entwickler-ecke.de/viewtopic.php?t=114819

      Schau dir das Beispiel drüben mal an. Und ja du machst es dir tatsächlich zu kompliziert. Du hast hier und da zwar leicht unterschiedliche Fragen und das ist damit ok (für mich) aber bitte in Zukunft nicht die gleiche Frage in mehr als einem Forum stellen (zumindest nicht gleichzeitig).

      Comment


      • #4
        Ich werde es in Zukunft machen. Aber wie kann ich noch Booleans über XML abspeichern?

        Comment


        • #5
          Der Settings Klasse einfach eine Boolean Property hinzufügen. Der Code ist nur für Color/Font etwas komplizierter weil die sich von Haus aus nicht so einfach in einen String serialisieren lassen. Bei Bools ist das aber simpel und bekommt der XmlSerializer so hin (genauso wie strings, integer, floats etc.)

          Comment


          • #6
            Ich habe es jetzt so probiert, doch es klappt leider nicht. Hier der Code um die Speichern- Funktion zu feuern:
            Code:
            private void button1_Click(object sender, EventArgs e)
                    {
                        var settings = Settings.Load();
            
                        settings.BackGroundColor = Color.Red;
                        settings.Font = new Font(FontFamily.GenericSansSerif, 8.25f, FontStyle.Regular);
                        
                        if(this.checkBox1.Checked)
                        {
                            settings.ZumErstenMalGeladen = true;
                        }
                        else
                        {
                            settings.ZumErstenMalGeladen = false;
                        }
            
                        this.BackColor = settings.BackGroundColor;
                        settings.Save(); 
                    }
            Und hier der Code in der Klasse settings:
            Code:
            [XmlIgnore]
                    public bool ZumErstenMalGeladen { get; set; }
                    
                    [XmlElement("Zumerstenmalgeladen")]
                    public bool Zumerstenmalgeladen
                    {
                        get
                        {
                            return false;
                        }
                        set
                        {
                            ZumErstenMalGeladen = true;
                        }
                    }
            Woran liegt es jetzt noch?

            Comment


            • #7
              Das mit den Attributen brauchst du wie gesagt nicht das war nur weil man Font/Color nicht einfach serialisieren kann. Also einfach nur
              [HIGHLIGHT=C#]public bool ZumErstenMalGeladen { get; set; }[/HIGHLIGHT]
              ohne Attribute.

              Setzen der Property machst du dir auch viel zu kompliziert. Beides sind Boolean also einfach zuweisen wie jeden anderen Datentyp auch.
              [HIGHLIGHT=C#]settings.ZumErstenMalGeladen = this.checkBox1.Checked;[/HIGHLIGHT]

              Edit: Wenn du im xml alles klein geschrieben haben möchtest dann doch das XmlAttribute dranschreiben. Aber gleich an die eigentliche Property
              [HIGHLIGHT=C#][XmlElement("zumerstenmalgeladen")]
              public bool ZumErstenMalGeladen { get; set; }[/HIGHLIGHT]

              Comment


              • #8
                Vielen Dank. Das funktioniert . Aber jun möchte ich die Methoden getrennt aufrufen. Also speichern und laden extra über einen Button. Ich habe schon folgendes Probiert:
                Code:
                var Settings = new Settings ();
                Das geht anhand einer Sicherheitsebenen nicht. Woran liegt dies?

                Comment


                • #9
                  Und was möchtest du dann machen wenn du eine leere Settings Instanz hast? Ich sehe darin keinen Sinn den Konstruktor zu benutzen anstatt Load(). Darum habe ich denn Konstruktor auch private gemacht. Von mir aus setzt den wieder auf public aber wie gesagt ich wüsste nicht was man mit einer leeren Settings Instanz anstellen will. Auch wenn du speicherst solltest du vorher geladen haben

                  Comment

                  Working...
                  X