CheckBox zeigt nicht richtig die Werte von Properties an

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Beatsleigher.

    CheckBox zeigt nicht richtig die Werte von Properties an

    Hey Leute.

    Ich weiss, das hier ist eigentlich eine richtig doofe Frage und ein richtig doofes Problem, aber mein Program liest seine Einstellungen richtig aus, kann sie aber nicht anzeigen.

    Gruendlicher:
    Ich habe eine Datei mit Einstellungen fuer das Program.
    Diese EInstellungen werden richtig ausgelesen, das habe ich alles mit MessageBoxen getestet.
    Doch sobald ich sie (Alle bools) in Form von CheckBoxen anzeigen moechte, streikt der.

    Hier sind die Code-Bloecke.
    Ich verstehe echt nicht, was VB heute gegen mich hat.

    So wird die Datei ausgelesen:
    (Urspruenglich hatte ich die True/False mittels Boolean.Parse() ausgelesen, aber schon da hat er nicht richtig ausgelesen)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub GetSets()
    2. Dim arr1() As String = Nothing
    3. Dim arr2() As String = Nothing
    4. Dim arr3() As String = Nothing
    5. Dim arr4() As String = Nothing
    6. Dim arr5() As String = Nothing
    7. Dim arr6() As String = Nothing
    8. Dim arr7() As String = Nothing
    9. Dim arr8() As String = Nothing
    10. For Each line As String In File.ReadAllLines(complete)
    11. If line.StartsWith("Start_on_boot") Then
    12. arr1 = Regex.Split(line, "=")
    13. End If
    14. '
    15. If line.StartsWith("Check_for_device") Then
    16. arr2 = Regex.Split(line, "=")
    17. End If
    18. '
    19. If line.StartsWith("Extend_DWM") Then
    20. arr3 = Regex.Split(line, "=")
    21. End If
    22. '
    23. If line.StartsWith("Autoload_admin") Then
    24. arr4 = Regex.Split(line, "=")
    25. End If
    26. '
    27. If line.StartsWith("Load_device_info") Then
    28. arr5 = Regex.Split(line, "=")
    29. End If
    30. '
    31. If line.StartsWith("Interactive_battery") Then
    32. arr6 = Regex.Split(line, "=")
    33. End If
    34. '
    35. If line.StartsWith("Check_for_updates") Then
    36. arr7 = Regex.Split(line, "=")
    37. End If
    38. '
    39. If line.StartsWith("Auto_update") Then
    40. arr8 = Regex.Split(line, "=")
    41. End If
    42. Next
    43. '
    44. If arr1(1) = "True" Then
    45. Start_on_boot = True
    46. ElseIf arr1(1) = "False" Then
    47. Start_on_boot = False
    48. Else : Start_on_boot = False
    49. End If
    50. If arr2(1) = "True" Then
    51. Check_for_device = True
    52. ElseIf arr2(1) = "False" Then
    53. Check_for_device = False
    54. Else : Check_for_device = True
    55. End If
    56. If arr3(1) = "True" Then
    57. Extend_DWM = True
    58. ElseIf arr3(1) = "False" Then
    59. Extend_DWM = False
    60. Else : Extend_DWM = False
    61. End If
    62. If arr4(1) = "True" Then
    63. Autoload_admin = True
    64. ElseIf arr4(1) = "False" Then
    65. Autoload_admin = False
    66. Else : Autoload_admin = False
    67. End If
    68. If arr5(1) = "True" Then
    69. Load_device_info = True
    70. ElseIf arr5(1) = "False" Then
    71. Load_device_info = False
    72. Else : Load_device_info = True
    73. End If
    74. If arr6(1) = "True" Then
    75. Interactive_battery = True
    76. ElseIf arr6(1) = "False" Then
    77. Interactive_battery = False
    78. Else : Interactive_battery = False
    79. End If
    80. If arr7(1) = "True" Then
    81. Check_for_updates = True
    82. ElseIf arr7(1) = "False" Then
    83. Check_for_updates = False
    84. Else : Check_for_updates = True
    85. End If
    86. If arr8(1) = "True" Then
    87. Auto_update = True
    88. ElseIf arr8(1) = "False" Then
    89. Auto_update = False
    90. Else : Auto_update = False
    91. End If
    92. MessageBox.Show(Start_on_boot.ToString() & Check_for_device.ToString() & Extend_DWM.ToString() & Autoload_admin.ToString() & Load_device_info.ToString() & Interactive_battery.ToString() & Check_for_updates.ToString() & Auto_update.ToString()) ' Ignoriert diese MessageBox. Die ist, wie gesagt, zum Testen der Variablen gewesen.
    93. End Sub


    Diese sind die Properties, in die die Einstellungen eingelesen werden:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. #Region "Properties"
    2. Public Property Start_on_boot() As Boolean
    3. Public Property Check_for_device() As Boolean
    4. Public Property Extend_DWM() As Boolean
    5. Public Property Autoload_admin() As Boolean
    6. Public Property Load_device_info() As Boolean
    7. Public Property Interactive_battery() As Boolean
    8. Public Property Check_for_updates() As Boolean
    9. Public Property Auto_update() As Boolean
    10. #End Region


    Und hier werden die Eigenschaften von den Properties in die CheckBoxen uebernommen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. CheckBox1.Checked = settings.Start_on_boot()
    2. CheckBox2.Checked = settings.Check_for_device()
    3. CheckBox3.Checked = settings.Extend_DWM()
    4. CheckBox4.Checked = settings.Autoload_admin()
    5. CheckBox5.Checked = settings.Load_device_info()
    6. CheckBox6.Checked = settings.Interactive_battery()
    7. CheckBox7.Checked = settings.Check_for_updates()
    8. CheckBox8.Checked = settings.Auto_update()


    Fuer alle, die interessiert sind, das hier ist die Datei mit den Einstellungen:
    Spoiler anzeigen

    Quellcode

    1. ### Warning: ###
    2. # Modifying this file manually may cause fatal errors in Universal Android Toolkit.
    3. # Some of these settings are highly experimental and may cause damage to your computer and/or Android device.
    4. # Please be careful, when modifying these settings.
    5. # In case you have modified a setting and UAT no longer runs smoothly, we have provided you with the standard settings
    6. # These defaults can be used at any time to reset UAT if it starts missbehaving.
    7. # Should UAT continue to missbehave, please make sure you are using a build provided by Team M4gkBeatz
    8. # before contacting us for help, as we will and cannot provide help for unofficial/custom builds of the software
    9. # as they may use modified code.
    10. # To download official and supported builds, please visit: http://sourceforge.net/projects/universalat
    11. ### Warning End ###
    12. Start_on_boot=False
    13. Check_for_devices=True
    14. Extend_DWM=False
    15. Autoload_admin=False
    16. Load_device_info=True
    17. Interactive_battery=False
    18. Check_for_updates=True
    19. Auto_update=False
    20. ### Default Settings for Universal Android Settings: ###
    21. # Please make sure you copy the settings exactly as they are provided here, should you need to
    22. # reset Universal Android Toolkit to its default state. The programs works very precise and will not
    23. # tolerate any differences.
    24. #
    25. # Start_on_boot=false
    26. # Check_for_device=true
    27. # Extend_DWM=false
    28. # Autoload_admin=false
    29. # Load_device_info=true
    30. # Interactive_battery=false
    31. # Check_for_updates=true
    32. # Auto_update=false
    33. ### End of Default Settings for Universal Android Toolkit ###


    Und nun, das ist das, was rauskommt, wenn ich die Einstellungen in Form von CheckBoxen sehen will:



    Koennt ihr mir sagen, was ich da verbockt hab? Ich komme nicht drauf.
    Vielen Dank fuer Eure Hilfe. Ich fuehle mich naemlich echt ein wenig verarscht ?(

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

    lies die Booleans einfach so ein:

    VB.NET-Quellcode

    1. Public Sub GetSets()
    2. For Each line As String In File.ReadAllLines(complete)
    3. If line.StartsWith("Start_on_boot") Then Start_on_boot = line.Contains("True")
    4. If line.StartsWith("Check_for_device") Then Check_for_device = line.Contains("True")
    5. If line.StartsWith("Extend_DWM") Then Extend_DWM = line.Contains("True")
    6. If line.StartsWith("Autoload_admin") Then Autoload_admin = line.Contains("True")
    7. If line.StartsWith("Load_device_info") Then Load_device_info = line.Contains("True")
    8. If line.StartsWith("Interactive_battery") Then Interactive_battery = line.Contains("True")
    9. If line.StartsWith("Check_for_updates") Then Check_for_updates = line.Contains("True")
    10. If line.StartsWith("Auto_update") Then Auto_update = line.Contains("True")
    11. Next
    12. End Sub
    @Beatsleigher: Du solltest gründlich überdenken, wie Du Einstellungen speichern/auslesen willst.
    Eine XML-Datei würde sich hier uper anbieten (würde auch das Schachteln von Einstellungen erlauben). Auslesen lässt sich das super einfach. Du kannst sogar das Framework die Konvertierung zwischen String und Boolean/Integer/... übernehmen lassen.
    Vom Prinzip her legst Du ein neues XDocument an, gehst alle Einstellungen, die Du hast durch und fügst dem Dokument für jede Einstellung ein XElement hinzu. Der Name des Elements ist der Name der Einstellung und der Inhalt ist halt der Wert. Beim Auslesen einfach alle Elemente durchlaufen, den Namen des Elements mit den Namen der vorhandenen Einstellungen abgleichen und die entsprechenden Felder setzen.

    Ich erlaube mir mal, auf ApplicationSettings in meiner Signatur zu verweisen. Dadurch kannst Du Dir das Schreiben einer Klasse, die die Einstellungen speichert und lädt, sparen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Schnapp Dir einfach ein DataSet aus der ToolBox, füg ne DataTable ein und bilde Deine Einstellungen darin ab. Binde nun diese Spalten an die Controls, fertig. Keine 5 Zeilen Code.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Danke fuer eure Antworten.
    Ich habe das Problem jetzt geloest, zwar sehr umstaendlich, aber geloest.

    @VB1963
    Haben wir auch schon versucht gehabt. Der hat die Werte einfach nicht angezeigt, und wir haben es auf zwei versch. Rechnern probiert...

    @Niko Ortner
    Danke fuer den Vorschlag, XML wollte ich zuerst auch nehmen, aber dann hatte ich mir gedacht, ich mache es so, wie ich es jetzt geschafft habe, damit die Benutzer, wenn sie denn mal neugierig werden sollten (und wer wird das nicht?), dass sie dann auch gleich erklaert bekommen, was da Sache ist.

    @SpaceyX
    Ich hab's nicht so wirklich mit sowas, um ehrlich zu sein.
    Aber wird beim naechsten Projekt mitbedacht. Mal gucken ob sich da dann was mit machen laesst :)
    @Beatsleigher:
    Wenn der Benutzer neugierig wird, soll er die Einstellungen ruhig manuell bearbeiten können. Wenn das System ausgereift genug ist, ist das für einen etwas erfahrenen Benutzer möglich. Beispielsweise XML: Da kann man sofort sehen, was mit

    XML-Quellcode

    1. <CheckForUpdates>True</CheckForUpdates>
    gemeint ist. Und man kann auch ganz einfach darauf schließen, dass die updates deaktiviert werden, wenn man das so abändert:

    XML-Quellcode

    1. <CheckForUpdates> false</CheckForUpdates>

    Achte hier genau auf die Groß-Klein-Schreibung und auf das Leerzeichen am Anfang. Das würde bei so einem eigenen System sofort zu Fehlern (oder falschen Einstellungen) führen (außer natürlich, man baut das clever genug). Bei XML wird das ignoriert. Da ist "False" genauso korrekt wie " True ".
    Es müsste sogar möglich sein, XML-Kommentare abzuspeichern. Da könnte man auch nochmal erklären, dass die Einstellungen möglichst nicht manuell geändert werden sollen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ja, da hast du allerdings auch Recht. Muss ich mal schauen, ob ich das evtl. im naechsten grossen Projekt mit einbaue.
    Vielen Dank nochmal :)


    Edit by Manschula: Unnötiges Vollzitat entfernt

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