Steuerelemente via. gespeicherter Einstellung aus *.ini Datei verändern?

  • VB.NET

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

    Steuerelemente via. gespeicherter Einstellung aus *.ini Datei verändern?

    Hallo

    Wie kann man Steuerelemente wie ich es vorhabe mit "RadioButton" aus einer gespeicherten Einstellungen in einer *.ini Datei verändern?
    Wie man Text in einer *.ini Datei speichert und wieder ausliest weiß ich, aber mit Steuerelementen habe ich so meine Probleme ...

    (zum Beispiel)

    Schreiben:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. INI_WriteValueToFile("Settings", "Check_v1", Me.Textbox1.Text, ".\Config.ini")
    3. INI_WriteValueToFile("Settings", "Check_v2", Me.Textbox2.Text, ".\Config.ini")
    4. End Sub


    Auslesen:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Me.TextBox1.Text = INI_ReadValueFromFile("Settings", "Check_v1", "", ".\Config.ini")
    3. Me.TextBox2.Text = INI_ReadValueFromFile("Settings", "Check_v2", "", ".\Config.ini")
    4. End Sub


    Alles kein Problem, allerdings würde ich gerne die Eigenschaften von Steuerelementen darin speichern und beim auslesen anwenden ..

    Wie ich es versucht habe:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. If INI_ReadValueFromFile("Settings", "Check_v1", "True", ".\Config.ini") Then
    3. RadioButton1.Checked = True
    4. Else
    5. RadioButton2.Checked = True
    6. End If
    7. End Sub


    Könnt ihr mir da weiterhelfen? :)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    MySettings habe ich mal genutzt, allerdings hatte ich immer das Problem, wenn im Form_Load (oder einen anderen Element) die Einstellungen geladen werden und diese leer sind weil der User die Savefunktion noch nicht genutzt hat oder wie auch immer, das Elemente wenn zum Beispiel den Namen ändern konnte keinen Namen mehr hatte.

    Mit If-Else hat es irgendwie nicht funktioniert diesen Fehler zu beheben, deswegen möchte ich inzwischen auf Config Dateien umsteigen.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Du brauchst My.Settings gar nicht laden oder speichern, da dies automatisch geschieht. Du musst eben die entsprechenden Properties des Controls an eine Settings-Variable binden, fertig. Keine einzige Zeile Code ist erforderlich.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Danke, so habe ich es jetzt gelöst:
    Für die Variable habe ich Integer genommen.

    Schreiben:

    VB.NET-Quellcode

    1. If RadioButton1.Checked = True Then
    2. My.Settings.Config1 = "1"
    3. Else
    4. My.Settings.Config1 = "0"
    5. End If


    Form_Load - Auslesen:

    VB.NET-Quellcode

    1. If My.Settings.Config1 = "0" Then
    2. Else
    3. Me.RadioButton1.Checked = True
    4. End If


    (Dein Video hat mir geholfen :D)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Na, dann hast Du EDR´s Tutorial nicht anständig gelesen oder mein Video nicht verinnerlicht. Du brauchst diese If-Abfragen nicht, da Du direkt einen Boolean an die Checked-Property des RadioButtons binden kannst. Deine Settings-Variable entspricht dann immer dieser Property.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    (Standard: Radiobutton1 ist auf True dauerhaft eingestellt und Radiobutton2 auf False und via. MySettings kann man das umstellen)

    Ich glaube ich habe sowas wie ein Denkfehler, angenommen ich würde den Radiobutton1 wieder als Standard festlegen wollen und dann abspeichern wäre ja die Checked-Eigenschaft von Radiobutton2 auf False, das heißt wenn im Form_Load-Event ohne If-Abfrage die Eigenschaften geladen werden hätte ja kein Radiobutton mehr die Checked-Eigenschaft auf True?? :huh: Für Radiobutton1 braucht man ja keine Settings-Variable weil er ja bereits dauerhaft auf True eingestellt ist?
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Nun, ich nutze RadioButtons nicht wirklich oft. Aber, was ich noch weiß ist, dass wenn Du z. B. 3 RadioButtons in ne GroupBox packst, dann kann immer nur einer Checked sein, die anderen 2 sind Not Checked. So ist es angedacht, dass dies so funktionieren soll. Das musst Du natürlich berücksichtigen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Also müsste doch eine If-Abfrage her, weil ich ja überprüfen muss ob die Checked-Eigenschaft von Radiobutton2 auf False ist um sonst die Eigenschaft von Radiobutton1 auf True zu stellen / bzw. so zu lassen wie sie auf Standard eingestellt ist:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. If My.Settings.Config1 = False Then
    3. Else
    4. End If
    5. End Sub


    (Edit: Ganz vergessen die ApplicationSettings bei dem Radionbutton2 einzustellen, dann muss ich nicht mal mehr was eingeben bei der If-Abfrage)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

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

    Nope, musst Du nicht. Du nimmst einfach eine Settings vom Typ Boolean und bindest alle betreffenden RadioButtons an diese Setting. Bzw., um es auf Dein spezielles Problem umzubiegen, brauchst Du soviele Settings-Variablen, wie Du RadioButtons hast, damit Du auch sauber unterscheiden kannst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Also müsste ich quasi jeden Radiobutton im CheckedChanged-Event reinschreiben, das dessen Eigenschaft auf True gestellt wird und die des anderen Radiobuttons auf False mit MySettings. (und umgekehrt)

    Ich wollte es eigentlich mit einen einzelnen Speicher-Button machen mit dem alle Settings bei allen Elementen speichern kann, soweit ich weiß brauch dann bei dieser Methode If-Abfragen.
    Das habe ich richtig verstanden?
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Du musst überhaupt nichts speichern. Die Settings werden automatisch beim Beenden der Anwendung gespeichert. Du brauchst auch kein Checked-Event, um die Settings zuzuweisen. Darum gibt es ja Datenbindung. Lies Dir bitte den Link nochmal gut durch.

    Wird die Checked-Property des RadioButtons geändert, so wird der Wert automatisch der Settings-Variablen zugewiesen und umgekehrt.

    Keine If-Abfragen, kein CheckedChanged-Event für das Speichern oder das Laden.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ah, okay, funktioniert soweit.
    Es gibt nur ein Problem, wenn ich den Radiobutton anklicke der auf Checked = False steht, wird die Checked-Eigenschaft beider Radiobutton auf Checked = False gesetzt, sobald ich den anderen Radiobutton nochmal anklicke wird die Eigenschaft auf True gesetzt. Wie kann ich verhindern, das die Checked-Eigenschaft der beiden Radiobutton auf False gesetzt wird beim ersten anklicken?

    Radiobutton1 = Config1 (Standard: True)
    Radiobutton2 = Config2 (Standard: False)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Seltsame Sache. Kann ich Dir leider keine Antwort drauf geben. RadioButtons verwende ich so gut wie nie. Evtl. weiß jemand anders die Lösung. Für solche Sachen ziehe ich CheckBoxen vor. Evtl. überlegst es Dir mal.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    In der tat, sehr merkwürdig.
    Ich bedanke mich aber erstmal für deine Hilfe, als Anfänger habe ich wieder einiges dazugelernt und hilft mir bei meinen zukünftigen Projekten :)
    Das mit den Checkboxen kann ich mir ja noch überlegen, und morgen werde ich hier im Thema nochmal nachfragen wo das Problem liegt.

    @SpaceyX
    Ich wünsch Dir noch einen schönen Abend.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

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

    Hab ich grad gefunden:


    Rule 5: Don't bind to clickable Radio Buttons

    I know how great it would be if you could just bind your bunch of radio buttons to an enum property. I really do. You think you're just going to hook up some Format and Parse events to translate back to your enum, and all will be well. It would be so darn convenient, if it actually worked. But WinForms just isn't cut out for this. For 3 full releases now (or is it 3.5 releases?), this has been the case. It's because of the event order, which is not something that MS can go switching up without causing thousands of developers to get really cheesed off.

    The problem really comes down to the fact that unlike other controls' data properties, the Checked property of a radio button doesn't actually change until focus leaves the radio button. And as with all WinForms controls the focus doesn't actually leave the radio button until after focus is given to another control, and in fact not until after the Click event of the newly focused control has fired. The result of this, as it pertains to radio buttons, is that if you try to bind to them, the bound properties in your datasource will actually lag your radio buttons' visual state by one click. If you have just two radio buttons, the datasource will be exactly opposite the visible state, until you click somewhere else that doesn't trigger an action that references those datasource properties. Which can make this a really infuriating bug to track down. I almost thought I was hallucinating.

    Now, in all honesty, it's possible to make it work. But it is the kludgiest kludge that ever kludged. Okay maybe it's not that bad... but it's a messy hack for sure. It takes a lot of work for something that really should already be available. As near as I can tell, the only way to solve this problem without giving up the databinding mechanism is to essentially make your own RadioButton control, with a property change and event order that is actually useful. You can either write one from scratch, or sub-class RadioButton and override all the event logic with custom message handling.


    Quelle: stackoverflow.com/questions/93…for-winforms-radiobuttons

    Nimm CheckBoxen, dann hast dieses Problem nicht.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Vultrax schrieb:

    CheckBoxen
    Noch mal zum Mitschreiben.
    Form mit CheckBox1, Boolean Setting MyCheck, der Rest passiert im Designer:
    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!