none
Settings Speichern in der Registry oder einer .ini RRS feed

  • Frage

  • Hallo Leute meine Frage ist wie ich am besten dieses kleine Tool zuende bekomme.

    Meine Frage ist wie ich es schaffe beim Betätigen von dem "Save" Button eine Datei oder eine Datenbank in der Registry zu generieren die einmal "eurokostenproeinkilometer" mit einem standartwert von 0,30€ anlegt und wenn die checkbox auf "true" ist diese 0,30€ * (mal) 2 rechnet. Als nächste Zeile diese "eurokostenproschulungsstunde" mit 60€ anlegt und diese auch bearbeitet bzw. umschreibt beim erneuten abspeichern.

    In der Registry wäre es mir am Liebsten.

    Momentaner Sorce Code von den Einstellungen:

    using Microsoft.Win32;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Forms;
    
    namespace Schulungskosten
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
            private void Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                (new FormSchulungsberechnung()).Show();
            }
    
            private void buttoncancel_Click(object sender, EventArgs e)
            {
    
            }
    
            private void zurückZurHauptseiteToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void buttonsave_Click(object sender, EventArgs e)
            {
               
            }
        }
    }

    Sorce Code für MainForm:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Schulungskosten
    {
        public partial class FormSchulungsberechnung : Form
        {
            public FormSchulungsberechnung()
            {
                InitializeComponent();
            }
    
            private void buttonberechnen_Click(object sender, EventArgs e)
            {
                double km, h, brutto, netto, gerundet;
                try
                {
                    /*if (h >= 0)
                    {
                        netto = Math.Sqrt(h);
                        tbnetto.Text = String.Format("{0:f}", netto);
                    }*/
                    h = Convert.ToDouble(tbh.Text);         //Eingabe Text
                    km = Convert.ToDouble(tbkm.Text);
                    netto = (60 * h) + ((0.30 / 1.19) * km);       //Berechnung
                    tbnetto.Text = String.Format("{0:c}", netto); //Ausgabe Text
                    brutto = (netto * 1.19);
                    tbbrutto.Text = String.Format("{0:c}", brutto);
                    gerundet = brutto;
                    tbgerundet.Text = String.Format("{0:0,0 €}", gerundet);
                }
                catch
                {
                    MessageBox.Show("Keine Eingabe vorhanden");
                    buttonreset_Click(null, null);
                }
            }
    
            private void buttonreset_Click(object sender, EventArgs e)
            {
                tbnetto.Clear();
                tbbrutto.Clear();
                tbgerundet.Clear();
                tbh.Clear();
                tbkm.Clear();
                tbkm.Focus();
            }
            private void einstellungenToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.Hide();
                (new Form2()).Show();
            }
    
            private void buttonclose_Click(object sender, EventArgs e)
            {
               Close();
            }
            private void schließenToolStripMenuItem_Click(object sender, EventArgs e)
            {
               Close();
            }
            private void FormSchulungskosten_FormClosed(object sender, FormClosedEventArgs e)
            {
                Application.Exit();
            }
        }
    }


    Montag, 27. November 2017 11:17

Antworten

  • Hi,

    ich würde weder eine Datenbank noch die Registry zum Speichern von Einstellungen verwenden sondern entweder die standardmäßig vorhandene app.config oder, wenn die Werte zur Laufzeit geändert und wieder gespeichert werden müssen, eine (ggfs. eigene) settings Datei.

    Für letzteres kann man bspw. eine Settings Klasse erstellen und diese in XML oder JSON serialisieren. Beim Programmstart deserialisiert man diese Datei dann wieder und hat alle Einstellungen, die man benötigt.

    Ein Beispiel für sowas hab ich mal vor längerer Zeit in einem Thread dieses Forums erstellt.

      Textdatei zur Variablen machen

    HTH

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 27. November 2017 12:38
    Moderator
  • Hey Florian ist das richtig?

    private void buttonsave_Click(object sender, EventArgs e)
            {
                RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software", true);
    
                key.CreateSubKey("Schulungsberechnung");
                key = key.OpenSubKey("Schulungsberechnung", true);
    
                key.SetValue(name: "tbgeldfeinkm", value: "0,30");
                key.SetValue(name: "tbgeldfeineh", value: "60");
                key.SetValue(name: "checkBox1", value: "true");
            }

    und habe die namen der Textboxen eingetragen und den Standartwert den es haben soll wenn es noch nicht in der Registry vorhanden ist.

    Bei SetValue müsste es so aussehen:

    key.SetValue("tbgeldfeinkm", "0,30");

    also jeweils ohne 'name:' und 'value:'.
    Du könntest auch direkt den Rückgabewert von CreateSubKey nutzen, statt dem extra Open, hab das nur Erklärungshalber aufgeteilt.


    - Gruß Florian


    Montag, 27. November 2017 14:14

Alle Antworten

  • Hi,

    ich würde weder eine Datenbank noch die Registry zum Speichern von Einstellungen verwenden sondern entweder die standardmäßig vorhandene app.config oder, wenn die Werte zur Laufzeit geändert und wieder gespeichert werden müssen, eine (ggfs. eigene) settings Datei.

    Für letzteres kann man bspw. eine Settings Klasse erstellen und diese in XML oder JSON serialisieren. Beim Programmstart deserialisiert man diese Datei dann wieder und hat alle Einstellungen, die man benötigt.

    Ein Beispiel für sowas hab ich mal vor längerer Zeit in einem Thread dieses Forums erstellt.

      Textdatei zur Variablen machen

    HTH

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 27. November 2017 12:38
    Moderator
  • Entschuldige aber da ich noch kein Profi in dem Gebiet bin fällt es mir recht schwer mit der Zuordnung der Begriffe...

    Gibt es keinen einfachen weg die Textfelder und die checkbox mit standartwerten zu versehen aber auch das diese geändert werden können sowie auszulesbar sind?

    Montag, 27. November 2017 13:02
  • Hi,

    doch, den "einfachen" Weg gibt es. Schau dir einfach mal das verlinkte Beispiel an, erstell dann eine Settings Klasse, wie Du sie brauchst, lade diese mittels Deserialisierung aus deiner Einstellungsdatei und weise dann die entsprechenden Werte beim initialen Laden des Formulars den Textfeldern, ... zu.

    Ich kann zwar verstehen, dass es dir als Anfänger evtl. etwas schwer fällt, die Begriffe zuzuordnen aber da bleibt dir leider nichts anderes übrig als dich dazu einzulesen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Montag, 27. November 2017 13:13
    Moderator
  • In der Registry wäre es mir am Liebsten.

    Das geht zum Beispiel so:
    RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software",true);
    
    key.CreateSubKey("Anwendungsname");
    key = key.OpenSubKey("Anwendungsname", true);
    
    key.SetValue("DeinSchlüssel", "DeinWert");
    Standard bei C# wären eher die UserSettings/AppSettings.

    - Gruß Florian

    Montag, 27. November 2017 13:35
  • In der Registry wäre es mir am Liebsten.

    Das geht zum Beispiel so:
    RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software",true);
    
    key.CreateSubKey("Anwendungsname");
    key = key.OpenSubKey("Anwendungsname", true);
    
    key.SetValue("DeinSchlüssel", "DeinWert");
    Standard bei C# wären eher die.

    - Gruß Florian

    Hey Florian ist das richtig?

    private void buttonsave_Click(object sender, EventArgs e)
            {
                RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software", true);
    
                key.CreateSubKey("Schulungsberechnung");
                key = key.OpenSubKey("Schulungsberechnung", true);
    
                key.SetValue(name: "tbgeldfeinkm", value: "0,30");
                key.SetValue(name: "tbgeldfeineh", value: "60");
                key.SetValue(name: "checkBox1", value: "true");
            }

    und habe die namen der Textboxen eingetragen und den Standartwert den es haben soll wenn es noch nicht in der Registry vorhanden ist.

    Montag, 27. November 2017 14:06
  • Hey Florian ist das richtig?

    private void buttonsave_Click(object sender, EventArgs e)
            {
                RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software", true);
    
                key.CreateSubKey("Schulungsberechnung");
                key = key.OpenSubKey("Schulungsberechnung", true);
    
                key.SetValue(name: "tbgeldfeinkm", value: "0,30");
                key.SetValue(name: "tbgeldfeineh", value: "60");
                key.SetValue(name: "checkBox1", value: "true");
            }

    und habe die namen der Textboxen eingetragen und den Standartwert den es haben soll wenn es noch nicht in der Registry vorhanden ist.

    Bei SetValue müsste es so aussehen:

    key.SetValue("tbgeldfeinkm", "0,30");

    also jeweils ohne 'name:' und 'value:'.
    Du könntest auch direkt den Rückgabewert von CreateSubKey nutzen, statt dem extra Open, hab das nur Erklärungshalber aufgeteilt.


    - Gruß Florian


    Montag, 27. November 2017 14:14