Checkbox in ini speichern/lesen aber es gibt fehler. [NEU]

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Checkbox in ini speichern/lesen aber es gibt fehler. [NEU]

    Hallo liebe Com,

    ich habe ein kleines aber feines Problem.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Einstellungen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ' Deklaration der Pfadangabe
    3. Dim sAppPath As String
    4. sAppPath = Application.StartupPath
    5. 'Wert einem String zuordnen
    6. Dim sb As StringBuilder
    7. sb = New StringBuilder(1024)
    8. 'INI Datei auslesen
    9. INI.Lesen("Einstellungen", "Arma 3 Pfad", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    10. TextBox1.Text = sb.ToString
    11. INI.Lesen("Einstellungen", "Startparameter", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    12. TextBox2.Text = sb.ToString
    13. INI.Lesen("Einstellungen", "Teamspeak 3 Pfad", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    14. TextBox3.Text = sb.ToString
    15. If INI.Lesen("Einstellungen", "Automatische Updates", "", sb, sb.Capacity, sAppPath & "\Settings.ini") = "True" Then
    16. CheckBox1.Checked = True
    17. Else
    18. CheckBox1.Checked = False
    19. End If
    20. End Sub


    Diese Code Zeile funktioniert so garnicht ich habe es auch ohne das IF versucht es ging. Aber ich kriege diesen Fehler hier nicht raus:

    Ungültige Konvertierung von der Zeichenfolge True in Typ Double manchmal auch Bolean.


    Der ganze Bereich sieht so aus

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Globalization
    2. Imports System.Threading
    3. Imports nUpdate.Updating
    4. Imports System.IO
    5. Imports System.Runtime.InteropServices
    6. Imports System.Text
    7.  
    8.  
    9.  
    10.  
    11. Public Class Einstellungen
    12. Private Declare Ansi Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (
    13. ByVal lpApplicationName As String,
    14. ByVal lpKeyName As String,
    15. ByVal lpString As String,
    16. ByVal lpFileName As String) _
    17. As Integer
    18.  
    19. Private Sub Einstellungen_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
    20. If (e.Button = Windows.Forms.MouseButtons.Left) Then
    21. Me.Capture = False
    22. Me.WndProc(Message.Create(Me.Handle, &HA1, CType(&H2, IntPtr), IntPtr.Zero))
    23. Else : End If
    24. End Sub
    25. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    26. ' Deklaration der Pfadangabe
    27. Dim sAppPath As String
    28. sAppPath = Application.StartupPath
    29. ' TextFeld einem Wert zuweisen
    30. Dim ArmaD = TextBox1.Text
    31. Dim TeamspeakD = TextBox3.Text
    32. Dim Startparam = TextBox2.Text
    33. Dim AutoJa = CheckBox1.Checked
    34.  
    35. 'INI Datei speichern
    36. WritePrivateProfileString("Einstellungen", "Arma 3 Pfad", ArmaD, sAppPath & "\Settings.ini")
    37. WritePrivateProfileString("Einstellungen", "Startparameter", Startparam, sAppPath & "\Settings.ini")
    38. WritePrivateProfileString("Einstellungen", "Teamspeak 3 Pfad", TeamspeakD, sAppPath & "\Settings.ini")
    39. WritePrivateProfileString("Einstellungen", "Automatische Updates", AutoJa, sAppPath & "\Settings.ini")
    40. Me.Close()
    41. End Sub
    42. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    43. Dim manager As New UpdateManager(New Uri("http://**********/launcher/updates.json"), ************ den Code habe ich extra entfernt :D
    44. Dim updaterUI As New UpdaterUI(manager, SynchronizationContext.Current)
    45. updaterUI.ShowUserInterface()
    46. updaterUI.UseHiddenSearch = True
    47. End Sub
    48. Private Sub Einstellungen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    49. ' Deklaration der Pfadangabe
    50. Dim sAppPath As String
    51. sAppPath = Application.StartupPath
    52. 'Wert einem String zuordnen
    53. Dim sb As StringBuilder
    54. sb = New StringBuilder(1024)
    55. 'INI Datei auslesen
    56. INI.Lesen("Einstellungen", "Arma 3 Pfad", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    57. TextBox1.Text = sb.ToString
    58. INI.Lesen("Einstellungen", "Startparameter", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    59. TextBox2.Text = sb.ToString
    60. INI.Lesen("Einstellungen", "Teamspeak 3 Pfad", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    61. TextBox3.Text = sb.ToString
    62. If INI.Lesen("Einstellungen", "Automatische Updates", "", sb, sb.Capacity, sAppPath & "\Settings.ini") = "True" Then
    63. CheckBox1.Checked = True
    64. Else
    65. CheckBox1.Checked = False
    66. End If
    67. End Sub
    68. End Class


    dazu gehört noch dieses schmucke ding

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports System.Text
    3. Public Class INI
    4. <DllImport("kernel32", EntryPoint:="GetPrivateProfileString")>
    5. Shared Function Lesen(
    6. ByVal Sektion As String, ByVal Key As String, ByVal StandartVal As String,
    7. ByVal Result As StringBuilder, ByVal Size As Int32, ByVal Dateiname As String) As Int32
    8. End Function
    9. End Class


    Ich verstehe leider nicht ganz was der Fehler ist hab schon einige Fehler von anderen gesehen jedoch kriege ich sie nicht auf "meinen" Code geändert. (ist nicht meiner ich nenne ihn mal nur so)
    Dies soll einfach abgespeichert werden und auch richtig angezeigt werden. Es soll eine Funktion für einen Automatisches Update mit nUpdate sein.- Es funktioniert alles bis auf diese Checkbox


    Mit freundlichen Grüßen

    Zeeanq
    Shared Function Lesen(....) As Int32 = "True"?!
    Dat geht auch nicht.

    Da mixt aber auch alles zusammen...
    True ist eigentlich nen Bool... den machst du mit "" zu nem String und vergleichst ihn mit ner Zahl... Also da solltest nochmal drüber nachdenken was du so tun willst.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Es soll nur einen Wert welchen auch immer ausgeben wenn der Haken gesetzt wurde. Standartmäßig setzt er ja ein True. Ich habe bisher auch keine Möglichkeit gefunden was anderes an der Stelle zu setzten.
    Mit Dropdown Liste wäre es doch wohl einfacher oder nicht?
    Warum habe ich nicht vorher dran gedacht.
    Hast du denn an anderer Stelle schonmal ne Ini eingelesen?
    Wobei ich von Inis eh abraten würde, da .Net ja My.Settings hat, welche dafür gedacht sind.
    Ich kenn deine INI Methode nu nicht ausm Kopf. Ich hab zwar auch irgendwo eine rumfliegen, aber ich glaub das bedienst nicht richtig.

    edit:
    Da hatte ich mal ne INI Klasse gepostet
    Datenbank Zugangsdaten von einer .INI Datei auslesen

    Es soll nur einen Wert welchen auch immer ausgeben wenn der Haken gesetzt wurde. Standartmäßig setzt er ja ein True

    Den Sinn versteh ich nu nicht so recht.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Zeeanq schrieb:

    in eine Externe ini File
    Nimm Settings und binde die entsprechenden Properties an entsprechende Settings. Alles .NET-konform. Die kannst Du auch lokal in einer Datei ablegen, gugst Du hier.
    Deine User sollten Entwicklungen im Sinne des technischen Fortschritts akzeptieren.
    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!
    Ich habe es zwar hingekriegt das er das alles so speichert und ausliest wie ich das will jedoch habe ich ein anderes Problem.

    @RodFromGermany
    Ich danke dir für die Antwort jedoch ist das jetzt geklärt.

    Ich versuche jetzt grade einen Simplen Auto Updater der aus der Ini lessen soll ob Ja oder Nein drinne steht.
    Der Code hat aber nicht wirklich sinn gehabt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub IoLLauncher_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim Ja As Boolean
    3. ' Deklaration der Pfadangabe
    4. Dim sAppPath As String
    5. sAppPath = Application.StartupPath
    6. 'Wert einem String zuordnen
    7. Dim sb As StringBuilder
    8. sb = New StringBuilder(1024)
    9. If INI.Lesen("Einstellungen", "Automatische Updates", "", sb, sb.Capacity, sAppPath & "\Settings.ini") = Ja Then
    10. Dim manager As New UpdateManager(New Uri("http://******/launcher/updates.json"), *****
    11. Dim updaterUI As New UpdaterUI(manager, SynchronizationContext.Current)
    12. updaterUI.ShowUserInterface()
    13. End If
    14. End Sub


    was mache ich denn falsch

    Zeeanq schrieb:

    ob Ja oder Nein drinne steht
    Da steht gewöhnlich noch viel mehr drinne.
    Also:
    Alle Gruppen auslesen, für jede Gruppe alle Einträge auslesen, jeden Eintrag einzeln auslesen und auswerten.
    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!

    Zeeanq schrieb:

    was genau du meinst
    Ich gehe davon aus, dass Du die Win-API-INI-Funktionen kennst:
    GetPrivateProfileSectionNames
    GetPrivateProfileSection
    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!

    Zeeanq schrieb:

    hier nicht weiter
    Dann solltest Du bereit sein, alles in Frage zu stellen.
    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!

    Zeeanq schrieb:

    ein wenig weiter hilft
    Hast Du dies schon gefunden?

    RodFromGermany schrieb:

    GetPrivateProfileSectionNames
    GetPrivateProfileSection
    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!