Hej Hej Peter, Hej Nåt sånt härnt borde lösa det:Radiobutton
Jag har ett litet program skrivet i VB6 men behöver nu lägga över till det till VB2005.
Jag har en loop som går igenom 5 radiobutton och avmarkerar och inaktiverar samtliga. De 5 radiobuttons ligger i en controlarray. I VB2005 finns inte det längre om jag förstått saken rätt, istället ska man använda sig av collections.
I VB6 såg koden ut så här:
For x=0 To 4
radioknapp(x).Value=False
radioknapp(x).Visible=False
Next x
I VB2005 försöker jag skriva så här först i början av koden:
Dim minsamling As New Collection()
Dim ctrl As Control
minsamling.Add(radioknapp0)
minsamling.Add(radioknapp1)
minsamling.Add(radioknapp2)
minsamling.Add(radioknapp3)
minsamling.Add(radioknapp4)
Och sen när jag kommer fram till det ställe där det ska hända har jag den här koden:
For Each ctrl In minsamling
ctrl.Checked=False
ctrl.Enabled=False
Next
Det som inte funkar är ctrl.Checked=False. Det accepteras inte. Om jag däremot skriver
radioknapp0.Checked=False så funkar det utmärkt. Men så kan jag inte göra hela tiden, för i programmet så kommer det komma tillfällen då jag inte kan hårdkoda vilken av de 5 radiobuttons som det gäller.
Hur ska jag göra?Sv: Radiobutton
Din variabel ctrl är av typen Control. Control har ingen proroperty med namnet Checked. Det har däremot typen RadioButton. Så, om ändrar från 'ctrl As Control' till 'ctrl As RadioButton' går det nog bättre. Vill du gå ett steg längre ändrar du även från 'As New Collection' till 'As New List(Of RadioButton)'.
Notera att man även kan loopa över en kontrolls kontroller med property'n Controls (inkl. formuläret). Då måste man dock testa att kontrollen är ev rätt typ innan man cast'ar den till RadioButton (typ 'If TypeOf c Is RadioButton Then...').
/AndersSv:Radiobutton
Det funkade utmärkt. Jag har en följdfråga. Om jag loopar igenom alla formulärets kontroller så hoppar den över alla radiobuttons som ligger inne i en groupbox. Den utvärderar alla knappar och själva groupboxens namn, men inte de kontroller som ligger i groupboxen. Hur ska jag få loopen att även titta på dessa? Sv: Radiobutton
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
UncheckRadioButtons(Me)
End Sub
Private Sub UncheckRadioButtons(ByVal aControl As Control)
For Each c As Control In aControl.Controls
If TypeOf (c) Is RadioButton Then
DirectCast(c, RadioButton).Checked = False
c.Enabled = False
End If
UncheckRadioButtons(c) ' rekursera ner i nästa nivå
Next
End Sub