Einstellungen / My.Settings

  • WPF

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Einstellungen / My.Settings

    Moin,

    kurze frage zum erstellen / hinzufügen von "Einstellungen / My.Settings".

    Kann mir jemand sagen ob und wie es geht mit einem Button Klick "Einstellungen / My.Settings" hinzu zufügen ?
    Wenn man ja auf "Projekt -> ProjektName-Eigenschaften... -> Einstellungen" geht, kann man da
    "Name, Typ, Bereich, Wert" einstellen und mit z.B. "TextBox1.Text = My.Settings.Name" aufrufen.

    Jetzt möchte ich aber mit einem Button und einer TextBox diesen erstellen.
    So das man im Programm "unendliche" Einstellungen / My.Settings hinzufügen kann.

    Wäre dankbar für hilfe :)
    @PlatinSecurity Settings werden üblicherweise während der Entwicklungszeit eines Programmes hinzugefügt.
    Was Dir vorschwebt, ist ein Hinzufügen während der RunTime, dazwischen kommt noch die CompileTime.
    Normale "Einstellungen" (Inhalte von Daten-Klassen, die z.B. XML-serialisiert werden) werden auch während der Entwicklungszeit angelegt.
    Kannst Du das ein wenig motivieren und beschreiben?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Kannst Du das ein wenig motivieren und beschreiben?


    Ok ich versuche es mal anders zu erklären.
    Ich habe vor ein Programm zu schreiben wo man sich Benutzer Acc. anlegen kann.
    Nix großes ... Nur halt wie der Username ist und das Passwort + paar andere daten wenn nötig.

    Und immer wenn ich dann so ein Acc. Anlegen will muss ich halt die TextBoxen als Bsp. ausfüllen und
    auf "Speichern" (Button1) klicken. Und da ich ja nicht weis wie viele Acc. ich anlegen will, sollte das Programm selber wissen
    was er alles Speichern kann ^^ ... Möchte halt nicht festlegen "du darfst nur jetzt 5 acc. oder so haben".

    Hoffe es ist besser beschrieben.
    Ich mag die My.Settings ja nicht. Nimm doch was gescheites zum Speichern wie z.B. ne XML oder sowas...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Naja wenn es so gehen würde wäre ich schon sehr dankbar wenn mir jemand erklärt wie man sowas macht.
    Denn mit "My.Settings.Create("","","","")" gehts ja nicht xD :D

    Wenn es nicht geht, wäre ich über die 2 Methode "XML" auch dankbar wenn man mir erklärt wie das geht.
    Hab ich so noch nie gemacht / genutzt / gehört ^^
    Du kannst ja sonst wenn du keine lust hast auf XML wie ich das ganze mit Dateien machen.

    ​<code>My.Computer.FileSystem.WriteAllText("c:\textdatei.txt", textbox1.text, True)</code>

    Und dann halt jeweils pro Account mit nem integer aus My.settings eine neue Datei machen. Speichern in app data oder so und halt datei ("user" & accountzahlvoninteger & "pass") und ("user" & accountzahlvoninteger & "user")

    Ist nicht die profilösung aber schon ein mal besser als mit My.settings


    Sorry habe das ganze am Handy getippt ist ein bisschen doof so (Rechtschreibung, Grammatik, etc.)
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Michdi schrieb:

    Du kannst ja sonst wenn du keine lust hast auf XML wie ich das ganze mit Dateien machen.

    Es gibt auch XML-Dateien, diese meinte ich hier auch ;) Von was du sprichst sind Text (.txt) Dateien. Hab ich ganz am Anfang auch mal gemacht. Ist nen riesen gewurschtel...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    PlatinSecurity schrieb:

    Denn mit "My.Settings.Create("","","","")" gehts ja nicht xD
    kann man schon...
    Ich habe zu diesem Thema einmal einige Sachen probiert.
    Zum Verschleiern der Daten gäbe es auch etwas dazu...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    ich kann ja malwieder mit Datentyp und Datenmodell kommen.
    Also wenn man weiß, was man abspeichern will, dann ist es eine Kleinigkeit, sowas, oder auch eine Liste davon zu serialisieren und zu deserialisieren.
    Das Serialisat wird üblicherweise in eine Datei geschrieben, aber man kanns auch in einen StringWriter blasen, und davon den String dann in ein Setting tun.

    Wie gesagt: Kernfrage ist: Was soll abgespeichert werden - welchen Datentyp hat das?

    Und da vermute ich, dass da ausser ein paar Textboxen noch nix konzipiert ist - aber eine Gruppe von Textboxen ist nunmal kein Datentyp.
    Habe es jetzt einfach mit einem Verzeichnis gemacht worin Datien gespeichert werden.
    Die Passwörter habe ich einfach mit MD5 x2 verschlüsselt damit wenn jemand die Datei auslesen will,
    nicht das eigentliche Passwort hat.

    Problem ist gerade nur noch.

    Ich prüfe ob ein Verzeichnis mit dem Namen "kv" vorhanden ist.
    Wenn ja dann soll er prüfen ob eine Datei mit dem Namen schon vorhanden ist und wenn nicht soll er dieses
    Verzeichnis anlegen. Jetzt habe ich aber schon das Verzeichnis und er versucht trotzdem das "kv" verzeichnis noch zu erstellen.

    Dadurch entsteht natürlich dann ein Fehler und der lautet:
    "IOException wurde nicht behandelt. - Pfad-/Dateizugriffsfehler"

    Halt komisch obwohl dieser Ordner vorhanden ist schon o_O

    Vorweg ich habe die

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Text
    3. Imports System.IO


    gemacht und so sieht aktuell das aus...

    VB.NET-Quellcode

    1. If File.Exists("C:\kv\") Then
    2. If File.Exists("C:\kv\" & nutzername.Text & ".xml") Then
    3. MsgBox("Dieser User ist bereits registriert !", MsgBoxStyle.Information, "Information")
    4. Else
    5. Dim pw As String
    6. pw = StringtoMD5(passwort.Text)
    7. My.Computer.FileSystem.WriteAllText("C:\kv\" & nutzername.Text & ".xml", nutzername.Text & vbNewLine & pw & vbNewLine & text2.Text & vbNewLine & text3.Text, True)
    8. user_check.Text += 1
    9. My.Settings.nr = user_check.Text
    10. My.Settings.Save()
    11. My.Settings.Reload()
    12. nutzername.Text = ""
    13. passwort.Text = ""
    14. text2.Text = ""
    15. text3.Text = ""
    16. End If
    17. Else
    18. MkDir("C:\kv\") 'HIER kommt der Fehler obwohl ein Ordner schon dort vorhanden ist :/
    19. Dim pw As String
    20. pw = StringtoMD5(passwort.Text)
    21. My.Computer.FileSystem.WriteAllText("C:\kv\" & nutzername.Text & ".xml", nutzername.Text & vbNewLine & pw & vbNewLine & text2.Text & vbNewLine & text3.Text, True)
    22. user_check.Text += 1
    23. My.Settings.nr = user_check.Text
    24. My.Settings.Save()
    25. My.Settings.Reload()
    26. nutzername.Text = ""
    27. passwort.Text = ""
    28. text2.Text = ""
    29. text3.Text = ""
    30. End If

    PlatinSecurity schrieb:

    so sieht aktuell das aus...

    VB.NET-Quellcode

    1. If File.Exists("C:\kv\") Then
    Bei dieser If-Verzweigung überprüfst du einen Pfad und keine Datei!
    Verwende DirectoryInfo/FileInfo-Klasse und vergiss den My.Computer-Namespace...
    My.Settings.Save() und My.Settings.Reload() kannst du weglassen...
    Die geänderten Settings werden beim Schließen der Form sowieso automatisch gespeichert.
    Projekteigenschaften/Anwendung/My.Settings bei herunterfahren speichern (Checkbox=an)
    Bei dieser If-Verzweigung überprüfst du einen Pfad und keine Datei!


    Omg... Ja danke :'D ... Dachte auch schon bei "Dir()", wo ich das überprüft habe ... "warum gehts nich" ...
    und dabei hab ich komplett falsch gedacht.

    Danke.

    VB.NET-Quellcode

    1. Dim ordner_dir As DirectoryInfo = New DirectoryInfo("c:\MyDir")
    2. If ordner_dir.Exists Then
    3. 'Macht er was anderes
    4. Else
    5. 'Macht er den Ordner
    6. End If


    Alles geklärt.

    Vielen dank für eure Hilfe
    Nachsatz:

    PlatinSecurity schrieb:

    Dachte auch schon bei "Dir()", wo ich das überprüft habe ...
    Schaue dir auch folgenden Artikel an...
    Und ganz wichtig auch das... (die empfohlenen Einstellungen)
    Du hast nicht Option Strict On eingestellt!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    My.Computer.FileSystem.WriteAllText("C:\kv\" & nutzername.Text & ".xml", nutzername.Text & vbNewLine & pw & vbNewLine & text2.Text & vbNewLine & text3.Text, True)


    Hey, die Dateiendung einfach auf .xml zu ändern zählt nicht ;)

    Beim verarbeiten von Dateien würde ich dir den System.IO Namespace empfehlen. My.Computer sollte man nicht mehr verwenden.

    Dann tät ich dich auf den Post vom @ErfinderDesRades hinweisen, den du wohl überlesen hast.

    ErfinderDesRades schrieb:

    ich kann ja malwieder mit Datentyp und Datenmodell kommen. (...)
    Und da vermute ich, dass da ausser ein paar Textboxen noch nix konzipiert ist - aber eine Gruppe von Textboxen ist nunmal kein Datentyp.


    Das war auch meine, wenn auch versteckte, Botschaft auf die ich mit meinem .XML Vorschlag raus wollte.

    Mit den passenden Grundgerüst (=Datenmodel) ist das Serialisieren/Deserialisieren ein Kinderspiel.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen