none
Visual Studio 2017: RadioButton zur Laufzeit erstellen und Status setzen

    Frage

  • Hallo Forum, 

    Ich erstelle zur Laufzeit mit einer Art Restore-Funktion Controls, deren Eigenschaften ich aus einer Ini-Datei auslese. Funktioniert auch alles soweit, nur bei den Radiobuttons bekomme ich den Status einfach nicht gesetzt...

    For Each mycont As Control In mycontrols
        If TypeOf mycont Is RadioButton Then
            Dim radio As New RadioButton
            radio = mycont
            radio.Checked = CBool(iniSettings.ReadValue("RadioButton", mycont.Name))
         End If
         If TypeOf mycont Is Label Then
            mycont.Text = iniSettings.ReadValue("Label", mycont.Name)
         End If
         setcontrols(mycont.Controls, Pfad)
    Next

    Egal, welcher Wert in der Ini-Datei steht (True oder False), die Buttons bleiben immer ohne Auswahl, also weder false noch true. Weiß vielleicht jemand, woran das liegt oder was ich vergessen habe?

    LG Micha


    • Bearbeitet MKnost Montag, 11. Juni 2018 20:01 ergänzung
    Montag, 11. Juni 2018 15:11

Antworten

  • Hallo Micha,

    mein Antwort bezog sich nur auf Deine Usprüngliche Frage, wie Du an alle Radio-Buttons kommst. Mit meiner rekursiven Funktion erhältst Du eine Liste mit allen Radiobuttons.

    Diese Liste kannst Du dann  in Deiner ursprünglich geposteten (nur leicht veränderten) Methode setcontrols verwenden. Ein Rekursion brauchst Du in setcontrols nicht mehr, da Du ja in der Liste (mycontrols) bereits alle Controlls, auch die in den untergeordneten Panels hast

    Public Sub setcontrols(ByVal mycontrols As List(Of Control), Pfad As String)
        Dim iniSettings As New INIDatei(Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\Turniere\" & Pfad & "\BACKUP_KOPLAN_" & Pfad.ToLower & ".ini")
    
        Modus = CInt(iniSettings.ReadValue("General", "Modus"))
        vTurnierName = iniSettings.ReadValue("General", "TurnierName")
        vAnzSpieler = iniSettings.ReadValue("General", "AnzSpieler")
        vAnzAutomaten = CInt(iniSettings.ReadValue("General", "Automaten"))
    
        For Each mycont As Control In mycontrols
            If TypeOf mycont Is Label Then
                mycont.Text = iniSettings.ReadValue("Label", mycont.Name)
            End If
            If TypeOf mycont Is RadioButton Then
                Dim radio As New RadioButton
                radio = mycont
                radio.Checked = iniSettings.ReadValue("RadioButton", mycont.Name)
            End If
        Next
    End Sub
    

    Grüße

    Roland

    • Als Antwort markiert MKnost Freitag, 15. Juni 2018 10:27
    Donnerstag, 14. Juni 2018 07:40

Alle Antworten

  • Hallo Micha,

    zunächst gehe ich auf Grund des verwendeten Radiobutton Attributs "Checked" davon aus, dass Du mit Windows Forms und nicht mit WPF arbeitest.

    Prinzipiell ist der von Dir gepostete Code in Ordnung, der Fehler muss in dem nicht sichtbaren Teil liegen.

    Aber ein Hinweis noch: Es kann in einem Container immer nur ein RadioButton aktiviert sein!

    Prüfen solltest Du noch einmal ob mycontrols auch wirklich Deine betroffenen radioButts beinhaltet, ansonsten kannst Du ja auch testweise einmal me.Controls, also alle Controls der Form verwenden.

    Weiterhin solltest Du Dein ReadValue in iniSettings noch einmal prüfen.

    Der Debugger kann Dir hier natürlich auch ein große Hilfe sein.

    Grüße

    Roland

    Dienstag, 12. Juni 2018 07:31
  • Hallo Roland, vielen Dank für die Hinweise....

    Ich glaube ich habe den Fehler gefunden :(

    Meine Form hat ein mainPanel, in dem sich um die 100 einzelne Panels befinden, die wiederum 4 Labels und 2 radiobuttons beinhalten. Die Labels und Radiobuttons in den inneren Panels finde ich mit meiner Funktion nicht.

    Wie mach ich das, dass ich in den inneren Panels die Funktion setcontrols auch nutzen kann? Ist das ein rekursiver aufruf?

    So sieht die Funktion zum wiederherstellen derzeit aus:

        Public Sub setcontrols(ByVal mycontrols As Control.ControlCollection, Pfad As String)
            Dim iniSettings As New INIDatei(Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\Turniere\" & Pfad & "\BACKUP_KOPLAN_" & Pfad.ToLower & ".ini")
    
            Modus = CInt(iniSettings.ReadValue("General", "Modus"))
            vTurnierName = iniSettings.ReadValue("General", "TurnierName")
            vAnzSpieler = iniSettings.ReadValue("General", "AnzSpieler")
            vAnzAutomaten = CInt(iniSettings.ReadValue("General", "Automaten"))
       
            For Each mycont As Control In mycontrols
                If TypeOf mycont Is Label Then
                    mycont.Text = iniSettings.ReadValue("Label", mycont.Name)
                End If
                If TypeOf mycont Is RadioButton Then
                    Dim radio As New RadioButton
                    radio = mycont
                    radio.Checked = iniSettings.ReadValue("RadioButton", mycont.Name)
                End If
                setcontrols(mycont.Controls, Pfad)
            Next
    
        End Sub

    Der Funktion wird das Main-Panel übergeben und der Pfad zur INI-Datei.

    LG Micha

    Dienstag, 12. Juni 2018 09:49
  • Hallo Micha,

    ja um alle Controls aus allen Pannels innerhalb des Panels zu finden bietet sich eine rekursive Funktion an. Die könnte so aussehen:

    Private Function GetControls(pnl As Panel) As List(Of Control)
        Dim collection As List(Of Control)
        collection = New List(Of Control)
        For Each ctl As Control In pnl.Controls
            Dim strCtrlTypename As String = ctl.GetType.Name
            If strCtrlTypename = "Panel" Then
                Dim subcollection As List(Of Control)
                subcollection = GetControls(DirectCast(ctl, Panel))
                If Not subcollection Is Nothing Then
                    Dim newControls As Control()
                    ReDim newControls(subcollection.Count - 1)
                    subcollection.CopyTo(newControls, 0)
                    collection.AddRange(newControls)
                End If
            End If
            collection.Add(ctl)
        Next
        Return collection
    End Function
    

    Dieser Funktion übergibst Du auch Dein MainPanel.

    Zurückgeliefert wird ein List(of Control) die alle Controls innerhalb des MainPanels incl. aller Subpanels liefert.

    Du müsstest dann nur in Deiner setcontrols den ersten Parameter auch als List(of Control) ändern, was aber den Ablauf Deiner Funktion nicht stören dürfte.

    Grüße

    Roland

    Dienstag, 12. Juni 2018 12:32
  • Hallo Roland, 

    erstmal vielen Dank für Deine Mühe... 

    Leider habe ich das mit den Listen nicht hinbekommen :( da fehlt mir doch noch diverses Grundlagenwissen. Kann man diese Listen dann auch in eine INI-Datei schreiben? Das benötige ich, da die INI-Dateien unter mehreren Nutzern austauschbar sein sollen.

    Ich habe jetzt zwar eine Lösung, aber das Verhalten ist etwas sonderbar und ich meine auch ganz schön komplex. Als Hintergrund mal ein paar Details:

    Ich habe vier Spielpläne (1x 16, 1x 32, 1x 64, 1x 128 Teilnehmer) die alle nach dem gleichen Muster aufgebaurt sind. 1 Mainpanel, darin je nach Teilnehmer weitere Panels, diese dann mit 4 Labels und 2 Checkboxen.) Die Prozedur, um die Controls auszulesen, ist diese: 

    Public Sub GetControls(ByVal mycontrols As Panel)
            Dim iniSettings As New INIDatei(SaveName & vTurnierName & "\BACKUP_KOPLAN_" & vTurnierName.ToLower & ".ini")
    
            iniSettings.WriteValue("General", "TurnierName", vTurnierName)
            iniSettings.WriteValue("General", "Modus", Modus)
            iniSettings.WriteValue("General", "AnzSpieler", vAnzSpieler)
            iniSettings.WriteValue("General", "Automaten", vAnzAutomaten)
            iniSettings.WriteValue("General", "Platzierung", orgPlatz)
    
            For Each pnl As Control In mycontrols.Controls
                If TypeOf pnl Is Panel Then
                    For Each ctrl As Control In pnl.Controls
                        If TypeOf ctrl Is RadioButton Then
                            Dim radio As New RadioButton
                            radio = ctrl
                            iniSettings.WriteValue("RadioButton", radio.Name, radio.Checked)
                        End If
                        If TypeOf ctrl Is Label Then
                            If ctrl.Tag <> Nothing Then
                                iniSettings.WriteValue("aktuelleSpiele", ctrl.Name, ctrl.Tag)
                            End If
                            iniSettings.WriteValue("Label", ctrl.Name, ctrl.Text)
                        End If
                    Next
                End If
            Next
    
        End Sub

    Das klappt auch wunderbar, ich verwende bei allen 4 Plänen denselben Code. Die Ini-Datei wird sauber erstellt.

    [General]
    TurnierName=Test64erDoKo
    Modus=64
    AnzSpieler=62
    Automaten=5
    Platzierung=42
    [Label]
    Label347=113
    SP109=109
    s218=
    s217=
    Label89=X
    SP106=106
    s212=
    s211=
    Label134=X
    SP108=108
    s215=
    s216=
    Label355=115
    SP111=111
    s221=
    s222=
    Label144=X
    SP125=125
    s250=
    s249=
    Label351=114
    SP110=110
    s220=
    s219=
    Label111=X
    SP107=107
    s214=
    s213=
    Label61=X
    SP105=105
    s210=
    s209=
    Label127=X
    SP103=103
    s205=
    s206=
    Label140=X
    SP104=104
    s208=
    s207=
    Label83=X
    SP99=99
    s198=
    s197=
    Label71=X
    SP98=98
    s196=
    s195=
    Label299=103
    SP94=94
    s188=
    s187=
    Label307=101
    SP96=96
    s192=
    s191=
    Label303=102
    SP95=95
    s190=
    s189=
    Label58=X
    SP97=97
    s194=
    s193=
    Label114=X
    SP102=102
    s204=
    s203=
    Label97=X
    SP100=100
    s200=
    s199=
    Label105=X
    SP101=101
    s202=
    s201=
    Label391=121
    SP120=120
    s240=
    s239=
    Label80=X
    SP123=123
    s246=
    s245=
    Label387=122
    SP119=119
    s238=
    s237=
    Label82=X
    SP121=121
    s242=
    s241=
    SP126=126
    s252=
    s251=
    Label401=125
    SP124=124
    s248=
    s247=
    Label113=X
    SP115=115
    s230=
    s229=
    Label91=X
    SP114=114
    s228=
    s227=
    Label359=116
    SP112=112
    s224=
    s223=
    Label135=X
    SP116=116
    s232=
    s231=
    Label79=X
    SP117=117
    s234=
    s233=
    Label126=X
    SP122=122
    s244=
    s243=
    Label66=X
    SP113=113
    s226=
    s225=
    Label125=X
    SP118=118
    s236=
    s235=
    Label109=X
    SP75=75
    s150=
    s149=Jörg
    Label100=X
    SP73=73
    s146=
    s145=Flummy
    Label117=X
    SP76=76
    s152=
    s151=Angie
    Label106=X
    SP74=74
    s148=
    s147=Fiedel
    Label132=X
    SP79=79
    s158=
    s157=Galonie
    Label120=X
    SP77=77
    s154=
    s153=Executor
    Label129=X
    SP78=78
    s156=
    s155=Blondit
    Label96=X
    SP72=72
    s144=
    s143=Marc
    Label70=X
    SP68=68
    s136=
    s135=Czui
    Label62=X
    SP67=67
    s134=
    s133=Catweazle
    Label59=X
    SP66=66
    s132=
    s131=Doofi
    Label53=X
    SP65=65
    s130=
    s129=Fabi
    Label55=X
    SP81=81
    s162=
    s161=
    Label88=X
    SP71=71
    s142=
    s141=Brina
    Label85=X
    SP70=70
    s140=
    s139=Bine
    Label74=X
    SP69=69
    s138=
    s137=Hasi
    Label287=99
    SP90=90
    s180=
    s179=
    Label291=97
    SP92=92
    s184=
    s183=
    Label279=100
    SP89=89
    s178=
    s177=
    Label283=98
    SP91=91
    s182=
    s181=
    Label295=104
    SP93=93
    s186=
    s185=
    Label92=X
    SP84=84
    s168=
    s167=
    Label103=X
    SP85=85
    s170=
    s169=
    Label68=X
    SP82=82
    s164=
    s163=
    Label77=X
    SP83=83
    s166=
    s165=
    Label136=X
    SP88=88
    s176=
    s175=
    Label141=X
    SP80=80
    s160=
    s159=Icke
    Label143=X
    SP86=86
    s172=
    s171=
    Label122=X
    SP87=87
    s174=
    s173=
    Label118=X
    SP45=45
    s90=Nisi
    s89=Executor
    Label273=67
    SP62=62
    s124=Knöpfchen
    s123=Mimi
    Label138=X
    SP48=48
    s96=FREILOS
    s95=Icke
    Label131=X
    SP47=47
    s94=Hardy
    s93=Galonie
    Label274=66
    SP63=63
    s126=Fleming
    s125=Bibi
    Label275=65
    SP64=64
    s127=Mr. Nice Guy
    s128=Miss P.
    Label272=68
    SP61=61
    s122=Grinch
    s121=Jutta
    Label123=X
    SP46=46
    s92=Hannes
    s91=Blondit
    Label269=71
    SP58=58
    s116=Junior
    s115=Gogo
    Label271=69
    SP60=60
    s120=NoBody
    s119=Flemming-Eike
    Label102=X
    SP42=42
    s84=Chris
    s83=Fiedel
    Label116=X
    SP44=44
    s88=Marco
    s87=Angie
    Label270=70
    SP59=59
    s118=Klaus
    s117=Knacki
    Label268=72
    SP57=57
    s114=Matze
    s113=Killeringe
    Label108=X
    SP43=43
    s86=Jörg
    s85=Eber
    Label99=X
    SP41=41
    s82=Flummy
    s81=Franzy
    Label267=73
    SP56=56
    s112=Marek
    s111=Löckchen
    Label94=X
    SP40=40
    s80=Marc
    s79=Heiino
    Label86=X
    SP39=39
    s78=Brina
    s77=Berni
    Label266=74
    SP55=55
    s110=Maddin
    s109=Martin
    Label263=77
    SP52=52
    s104=Obi
    s103=Flo
    Label76=X
    SP38=38
    s76=Basti
    s75=Bine
    Label265=75
    SP54=54
    s108=Eddi
    s107=Mario
    Label73=X
    SP37=37
    s74=Darty
    s73=Hasi
    Label264=76
    SP53=53
    s105=Bine D.
    s106=Cheffe
    Label65=X
    SP35=35
    s70=Catweazle
    s69=Maverick
    Label56=X
    SP34=34
    s68=Doofi
    s67=Clempi
    Label260=80
    SP49=49
    s98=Mecki
    s97=Moldie
    Label64=X
    SP36=36
    s72=Czui
    s71=Edyta
    Label262=78
    SP51=51
    s102=Melle
    s101=Olli
    Label261=79
    SP50=50
    s100=Mütze
    s99=Kocki
    Label52=X
    SP33=33
    s66=Fabi
    s65=FREILOS
    Label49=48
    SP31=31
    s62=Mr. Nice Guy
    s61=Icke
    Label12=36
    SP7=7
    s14=Edyta
    s13=Flo
    Label35=43
    SP22=22
    s44=Klaus
    s43=Jörg
    Label50=48
    SP32=32
    s64=FREILOS
    s63=Miss P.
    Label11=35
    SP6=6
    s12=Catweazle
    s11=Melle
    Label47=47
    SP30=30
    s60=Fleming
    s59=Hardy
    Label36=44
    SP23=23
    s46=Flemming-Eike
    s45=Angie
    Label45=47
    SP29=29
    s58=Bibi
    s57=Galonie
    Label41=45
    SP26=26
    s52=Grinch
    s51=Nisi
    Label42=46
    SP27=27
    s54=Mimi
    s53=Blondit
    Label44=46
    SP28=28
    s56=Knöpfchen
    s55=Hannes
    Label8=34
    SP4=4
    s8=Doofi
    s7=Mütze
    Label32=42
    SP20=20
    s40=Junior
    s39=Chris
    Label9=35
    SP5=5
    s10=Maverick
    s9=Olli
    Label33=43
    SP21=21
    s42=Eber
    s41=Knacki
    Label39=45
    SP25=25
    s50=Jutta
    s49=Executor
    Label38=44
    SP24=24
    s48=NoBody
    s47=Marco
    Label5=33
    SP2=2
    s4=Fabi
    s3=Mecki
    Label29=41
    SP18=18
    s36=Matze
    s35=Flummy
    Label6=34
    SP3=3
    s6=Kocki
    s5=Clempi
    Label30=42
    SP19=19
    s38=Gogo
    s37=Fiedel
    Label3=33
    SP1=1
    s1=FREILOS
    s2=Moldie
    Label17=37
    SP10=10
    s20=Darty
    s19=Cheffe
    Label14=36
    SP8=8
    s16=Czui
    s15=Obi
    Label15=37
    SP9=9
    s18=Hasi
    s17=Bine D.
    Label20=38
    SP12=12
    s24=Basti
    s23=Eddi
    Label18=38
    SP11=11
    s22=Bine
    s21=Mario
    Label27=41
    SP17=17
    s34=Franzy
    s33=Killeringe
    Label26=40
    SP16=16
    s32=Marek
    s31=Marc
    Label24=40
    SP15=15
    s30=Heiino
    s29=Löckchen
    Label23=39
    SP14=14
    s28=Brina
    s27=Maddin
    Label21=39
    SP13=13
    s26=Berni
    s25=Martin
    [RadioButton]
    sp109_1=False
    sp109_2=False
    sp106_1=False
    sp106_2=False
    sp108_1=False
    sp108_2=False
    sp111_1=False
    sp111_2=False
    sp125_1=False
    sp125_2=False
    sp110_1=False
    sp110_2=False
    sp107_1=False
    sp107_2=False
    sp105_1=False
    sp105_2=False
    sp103_1=False
    sp103_2=False
    sp104_1=False
    sp104_2=False
    sp99_1=False
    sp99_2=False
    sp98_1=False
    sp98_2=False
    sp94_1=False
    sp94_2=False
    sp96_1=False
    sp96_2=False
    sp95_1=False
    sp95_2=False
    sp97_1=False
    sp97_2=False
    sp102_1=False
    sp102_2=False
    sp100_1=False
    sp100_2=False
    sp101_1=False
    sp101_2=False
    sp120_1=False
    sp120_2=False
    sp123_1=False
    sp123_2=False
    sp119_1=False
    sp119_2=False
    sp121_1=False
    sp121_2=False
    sp126_1=False
    sp126_2=False
    sp124_1=False
    sp124_2=False
    sp115_1=False
    sp115_2=False
    sp114_1=False
    sp114_2=False
    sp112_1=False
    sp112_2=False
    sp116_1=False
    sp116_2=False
    sp117_1=False
    sp117_2=False
    sp122_1=False
    sp122_2=False
    sp113_1=False
    sp113_2=False
    sp118_1=False
    sp118_2=False
    sp75_1=False
    sp75_2=False
    sp73_1=False
    sp73_2=False
    sp76_1=False
    sp76_2=False
    sp74_1=False
    sp74_2=False
    sp79_1=False
    sp79_2=False
    sp77_1=False
    sp77_2=False
    sp78_1=False
    sp78_2=False
    sp72_1=False
    sp72_2=False
    sp68_1=False
    sp68_2=False
    sp67_1=False
    sp67_2=False
    sp66_1=False
    sp66_2=False
    sp65_1=False
    sp65_2=False
    sp81_1=False
    sp81_2=False
    sp71_1=False
    sp71_2=False
    sp70_1=False
    sp70_2=False
    sp69_1=False
    sp69_2=False
    sp90_1=False
    sp90_2=False
    sp92_1=False
    sp92_2=False
    sp89_1=False
    sp89_2=False
    sp91_1=False
    sp91_2=False
    sp93_1=False
    sp93_2=False
    sp84_1=False
    sp84_2=False
    sp85_1=False
    sp85_2=False
    sp82_1=False
    sp82_2=False
    sp83_1=False
    sp83_2=False
    sp88_1=False
    sp88_2=False
    sp80_1=False
    sp80_2=False
    sp86_1=False
    sp86_2=False
    sp87_1=False
    sp87_2=False
    sp45_1=True
    sp45_2=False
    sp62_1=False
    sp62_2=False
    sp48_1=True
    sp48_2=False
    sp47_1=True
    sp47_2=False
    sp63_1=False
    sp63_2=False
    sp64_1=False
    sp64_2=False
    sp61_1=False
    sp61_2=False
    sp46_1=True
    sp46_2=False
    sp58_1=False
    sp58_2=False
    sp60_1=False
    sp60_2=False
    sp42_1=True
    sp42_2=False
    sp44_1=True
    sp44_2=False
    sp59_1=False
    sp59_2=False
    sp57_1=False
    sp57_2=False
    sp43_1=False
    sp43_2=True
    sp41_1=False
    sp41_2=True
    sp56_1=False
    sp56_2=False
    sp40_1=False
    sp40_2=True
    sp39_1=False
    sp39_2=True
    sp55_1=False
    sp55_2=False
    sp52_1=False
    sp52_2=False
    sp38_1=True
    sp38_2=False
    sp54_1=False
    sp54_2=False
    sp37_1=True
    sp37_2=False
    sp53_1=False
    sp53_2=False
    sp35_1=False
    sp35_2=True
    sp34_1=False
    sp34_2=True
    sp49_1=False
    sp49_2=False
    sp36_1=False
    sp36_2=True
    sp51_1=False
    sp51_2=False
    sp50_1=False
    sp50_2=False
    sp33_1=False
    sp33_2=True
    sp31_1=False
    sp31_2=True
    sp7_1=True
    sp7_2=False
    sp22_1=False
    sp22_2=True
    sp32_1=True
    sp32_2=False
    sp6_1=True
    sp6_2=False
    sp30_1=False
    sp30_2=True
    sp23_1=False
    sp23_2=True
    sp29_1=False
    sp29_2=True
    sp26_1=False
    sp26_2=True
    sp27_1=False
    sp27_2=True
    sp28_1=False
    sp28_2=True
    sp4_1=True
    sp4_2=False
    sp20_1=False
    sp20_2=True
    sp5_1=True
    sp5_2=False
    sp21_1=True
    sp21_2=False
    sp25_1=False
    sp25_2=True
    sp24_1=False
    sp24_2=True
    sp2_1=True
    sp2_2=False
    sp18_1=False
    sp18_2=True
    sp3_1=False
    sp3_2=True
    sp19_1=False
    sp19_2=True
    sp1_1=False
    sp1_2=True
    sp10_1=True
    sp10_2=False
    sp8_1=True
    sp8_2=False
    sp9_1=True
    sp9_2=False
    sp12_1=True
    sp12_2=False
    sp11_1=True
    sp11_2=False
    sp17_1=True
    sp17_2=False
    sp16_1=False
    sp16_2=True
    sp15_1=True
    sp15_2=False
    sp14_1=True
    sp14_2=False
    sp13_1=True
    sp13_2=False
    


    Das zurückspielen geschieht mit folgender Procedur:

    Public Sub SetControls(ByVal mycontrols As Panel, Pfad As String)
            Dim iniSettings As New INIDatei(Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\Turniere\" & Pfad & "\BACKUP_KOPLAN_" & Pfad.ToLower & ".ini")
    
            vTurnierName = iniSettings.ReadValue("General", "TurnierName")
            Modus = CInt(iniSettings.ReadValue("General", "Modus"))
            vAnzSpieler = iniSettings.ReadValue("General", "AnzSpieler")
            vAnzAutomaten = CInt(iniSettings.ReadValue("General", "Automaten"))
            orgPlatz = CInt(iniSettings.ReadValue("General", "Platzierung"))
            For Each pnl As Control In mycontrols.Controls
                If TypeOf pnl Is Panel Then
                    For Each ctrl As Control In pnl.Controls
                        If TypeOf ctrl Is RadioButton Then
                            Dim radio As New RadioButton
                            radio = ctrl
                            radio.Checked = CBool(iniSettings.ReadValue("RadioButton", ctrl.Name))
                        End If
                        If TypeOf ctrl Is Label Then
                            ctrl.Text = iniSettings.ReadValue("Label", ctrl.Name)
                            If iniSettings.ReadValue("aktuelleSpiele", ctrl.Name) <> "" Then
                                ctrl.Tag = iniSettings.ReadValue("aktuelleSpiele", ctrl.Name)
                                ctrl.BackColor = Color.Lime
                            End If
                        End If
                        SetControls(pnl, Pfad)
                    Next
                End If
            Next
    
        End Sub

    Auch diese Prozedur verwende ich in allen 4 Plänen. Bei den 16er und 32er Plänen klappt das hervorragend, nur beim 64er und 128er nicht. Da kommen die Inhalte nur teilweise. Wenn ich nur die Labels zurückspiele (und die Labels auskommentiere), klappt alles, spiele ich nur die Radiobuttons zurück, klappt auch alles. Mach ich beides (wie in der prozedur oben), gehts in die Hose. 

    Kann das ein Problem der Menge der Controls sein? Wie gesagt, das schreiben in die Ini-Datei klappt, es sind alle drin, nur das Auslesen schlägt in teilen fehl.

    Wenn ich das komplett auf Deinen Tipp mit den Listen umstellen würde, wäre das sehr aufwendig, das dann auch in eine INI-Datei zu portieren? 

    LG Micha


    • Bearbeitet MKnost Mittwoch, 13. Juni 2018 15:03
    Mittwoch, 13. Juni 2018 14:56
  • Hallo Micha,

    mein Antwort bezog sich nur auf Deine Usprüngliche Frage, wie Du an alle Radio-Buttons kommst. Mit meiner rekursiven Funktion erhältst Du eine Liste mit allen Radiobuttons.

    Diese Liste kannst Du dann  in Deiner ursprünglich geposteten (nur leicht veränderten) Methode setcontrols verwenden. Ein Rekursion brauchst Du in setcontrols nicht mehr, da Du ja in der Liste (mycontrols) bereits alle Controlls, auch die in den untergeordneten Panels hast

    Public Sub setcontrols(ByVal mycontrols As List(Of Control), Pfad As String)
        Dim iniSettings As New INIDatei(Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\Turniere\" & Pfad & "\BACKUP_KOPLAN_" & Pfad.ToLower & ".ini")
    
        Modus = CInt(iniSettings.ReadValue("General", "Modus"))
        vTurnierName = iniSettings.ReadValue("General", "TurnierName")
        vAnzSpieler = iniSettings.ReadValue("General", "AnzSpieler")
        vAnzAutomaten = CInt(iniSettings.ReadValue("General", "Automaten"))
    
        For Each mycont As Control In mycontrols
            If TypeOf mycont Is Label Then
                mycont.Text = iniSettings.ReadValue("Label", mycont.Name)
            End If
            If TypeOf mycont Is RadioButton Then
                Dim radio As New RadioButton
                radio = mycont
                radio.Checked = iniSettings.ReadValue("RadioButton", mycont.Name)
            End If
        Next
    End Sub
    

    Grüße

    Roland

    • Als Antwort markiert MKnost Freitag, 15. Juni 2018 10:27
    Donnerstag, 14. Juni 2018 07:40
  • Hallo Roland,

    ich hab mein Problem jetzt lösen können. Allerdings etwas anders, wie du es empfohlen hast. Ich bin bei meiner Suche über eine Funktionalität "Iterator" gestossen, mit der ich mich mal versucht habe. Hier mein Code:

    Die Funktion zum Auslesen der Controls:

       Private Iterator Function Listcontrols(ByVal TopControl As Control, ByVal Controltype As Type) As IEnumerable(Of Control)
    
            For Each ctrl As Control In TopControl.Controls.OfType(Of Control)()
                If ctrl.GetType Is Controltype Then Yield ctrl
                If ctrl.Controls.Count > 0 Then
                    For Each child As Control In Listcontrols(ctrl, Controltype)
                        If child.GetType Is Controltype Then Yield child
                    Next
                End If
            Next
    
        End Function

    Sichern aller Controls in einer INI-Datei:

    Public Sub GetControls(ByVal mycontrols As Panel)
            Dim iniSettings As New INIDatei(SaveName & vTurnierName & "\BACKUP_KOPLAN_" & vTurnierName.ToLower & ".ini")
    
            iniSettings.WriteValue("General", "TurnierName", vTurnierName)
            iniSettings.WriteValue("General", "Modus", Modus)
            iniSettings.WriteValue("General", "AnzSpieler", vAnzSpieler)
            iniSettings.WriteValue("General", "Automaten", vAnzAutomaten)
            iniSettings.WriteValue("General", "Platzierung", orgPlatz)
    
            For Each pnl As Control In mycontrols.Controls
                If TypeOf pnl Is Panel Then
                    For Each ctrl As Control In pnl.Controls
                        If TypeOf ctrl Is RadioButton Then
                            Dim radio As New RadioButton
                            radio = ctrl
                            iniSettings.WriteValue("RadioButton", radio.Name, radio.Checked)
                        End If
                        If TypeOf ctrl Is Label Then
                            If ctrl.Tag <> Nothing Then
                                iniSettings.WriteValue("aktuelleSpiele", ctrl.Name, ctrl.Tag)
                            End If
                            iniSettings.WriteValue("Label", ctrl.Name, ctrl.Text)
                        End If
                    Next
                End If
            Next
    
        End Sub

    Auslesen der INI-Datei und setzen der Werte für alle Controls

    Public Sub SetControls(ByVal mycontrols As Panel, Pfad As String)
            Dim iniSettings As New INIDatei(Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\Turniere\" & Pfad & "\BACKUP_KOPLAN_" & Pfad.ToLower & ".ini")
    
            If vTurnierName = "" Then
                vTurnierName = iniSettings.ReadValue("General", "TurnierName")
                Modus = CInt(iniSettings.ReadValue("General", "Modus"))
                vAnzSpieler = iniSettings.ReadValue("General", "AnzSpieler")
                vAnzAutomaten = CInt(iniSettings.ReadValue("General", "Automaten"))
                orgPlatz = CInt(iniSettings.ReadValue("General", "Platzierung"))
            End If
    
            For Each c As Control In Listcontrols(mycontrols, GetType(Label))
                c.Text = iniSettings.ReadValue("Label", c.Name)
                If iniSettings.ReadValue("aktuelleSpiele", c.Name) <> "" Then
                    c.Tag = iniSettings.ReadValue("aktuelleSpiele", c.Name)
                    c.BackColor = Color.Lime
                End If
            Next
    
            For Each c As Control In Listcontrols(mycontrols, GetType(RadioButton))
                Dim radio As New RadioButton
                radio = c
                radio.Checked = CBool(iniSettings.ReadValue("RadioButton", c.Name))
            Next
    
        End Sub

    Noch mal vielen Dank für die Mühe

    LG Micha


    • Bearbeitet MKnost Freitag, 15. Juni 2018 10:28 Umstrukturierung
    • Als Antwort vorgeschlagen Roland Franz Freitag, 15. Juni 2018 11:51
    Freitag, 15. Juni 2018 10:27
  • Hallo Micha,

    Deine Funktion zum auslesen der Controls über den Iterator finde ich in diesem Fall in der Tat eleganter.

    Viele Grüße

    Roland

    Freitag, 15. Juni 2018 11:54