Avatar billede cmau Nybegynder
29. januar 2007 - 14:20 Der er 10 kommentarer og
1 løsning

rende 35 labels igennem

Hej eksperter

Hvordan kan jeg rende 35 labels igennem og skrive i dem?

Alle mine labels hedder labe1, label2.. label35

Jeg sidder og prøver med:
        Dim ix As Single
        For ix = 0 To 35
            Label[ix].Text = ix & "test"
        Next ix

men ved ikke hvordan jeg skal få det til at virke.
Avatar billede arne_v Ekspert
29. januar 2007 - 15:39 #1
prøv noget a la:

            For Each c As Control In Controls
                If TypeOf c Is Label Then
                    If c.Name.IndexOf("label") = 0 Then
                    CType(c, Label).Text = Integer.Parse(c.Name.Substring(5)) & "test"
                    End If
                End If
            Next
Avatar billede cmau Nybegynder
29. januar 2007 - 20:32 #2
Dersker ikke noget og den melder ikke fejl, kan det ikke gøres mere simpelt som jeg prøvede?
Avatar billede cmau Nybegynder
29. januar 2007 - 21:16 #3
Jeg havde forestillet mig noget ligende:
        Dim ix As Single
        For ix = 0 To 35
            eval("label" & ix).Text = ix & "test"
        Next ix
Avatar billede arne_v Ekspert
30. januar 2007 - 03:09 #4
det kan du via reflection

men jeg vil klart anbefale den anden løsning
Avatar billede arne_v Ekspert
30. januar 2007 - 03:15 #5
noget a la

        Dim i As Integer
        For i = 0 To 35
            CType(this.GetType().GetField("label" & i).GetValue(this),Label).Text = i & "test"
        Next i
Avatar billede cmau Nybegynder
30. januar 2007 - 10:55 #6
Den skriver at this is noget declared.
Avatar billede arne_v Ekspert
30. januar 2007 - 15:30 #7
sorry det er en C#'isme

det er:

me

i VB.NET
Avatar billede cmau Nybegynder
30. januar 2007 - 16:27 #8
Jeg gjorde det på den her måde, ville det være smartere at lave det om til din eller?


    'Definer labels.
    Function labels()
        LabelArray(1) = Label1
        LabelArray(2) = Label2
        LabelArray(3) = Label3
        LabelArray(4) = Label4
        LabelArray(5) = Label5
        LabelArray(6) = Label6
        LabelArray(7) = Label7
        LabelArray(8) = Label8
        LabelArray(9) = Label9
        LabelArray(10) = Label10
        LabelArray(11) = Label11
        LabelArray(12) = Label12
        LabelArray(13) = Label13
        LabelArray(14) = Label14
        LabelArray(15) = Label15
        LabelArray(16) = Label16
        LabelArray(17) = Label17
        LabelArray(18) = Label18
        LabelArray(19) = Label19
        LabelArray(20) = Label20
        LabelArray(21) = Label21
        LabelArray(22) = Label22
        LabelArray(23) = Label23
        LabelArray(24) = Label24
        LabelArray(25) = Label25
        LabelArray(26) = Label26
        LabelArray(27) = Label27
        LabelArray(28) = Label28
        LabelArray(29) = Label29
        LabelArray(30) = Label30
        LabelArray(31) = Label31
        LabelArray(32) = Label32
        LabelArray(33) = Label33
        LabelArray(34) = Label34
        LabelArray(35) = Label35
        LabelArray(36) = Label36
        LabelArray(37) = Label37
        Return True
    End Function
    'Smid dage ind.
    Function makedates(ByVal month, ByVal year)
        'Definer variabler, som kun skal bruges til at udskrive datoerne i de rigtige felter.
        Dim i As Integer
        Dim rowday As Integer
        rowday = 1
        Dim startday As Single
        'Hent labels definationerne ud.
        labels()
        'Find ud af hvad dag måneden starter på.
        startday = Weekday("01-" & month + 1 & "-" & year, FirstDayOfWeek.Monday)
        'Kør alle 37 labels igennem.
        For i = 1 To 37
            If startday > i Then
                LabelArray(i).BackColor = Color.Empty
                LabelArray(i).BorderStyle = BorderStyle.None
                LabelArray(i).Text = ""
            ElseIf i <= (Date.DaysInMonth(year, month + 1) + startday - 1) Then
                If i = day And month = Microsoft.VisualBasic.Month(thisdate) - 1 And year = Microsoft.VisualBasic.Year(thisdate) Then
                    LabelArray(i).BackColor = Color.DarkGray
                Else
                    LabelArray(i).BackColor = Color.LightGray
                End If
                LabelArray(i).Text = rowday
                rowday = rowday + 1
                LabelArray(i).BorderStyle = BorderStyle.Fixed3D
            Else
                LabelArray(i).BackColor = Color.Empty
                LabelArray(i).BorderStyle = BorderStyle.None
                LabelArray(i).Text = ""
            End If
        Next i
        Return True
    End Function
Avatar billede arne_v Ekspert
30. januar 2007 - 16:51 #9
det er ikke nogen daarlig maade

enten den eller iterere over controls

men hold dig fra reflection
Avatar billede cmau Nybegynder
30. januar 2007 - 18:43 #10
Okay :) Men smid et svar fordi du prøvede :)
Avatar billede arne_v Ekspert
30. januar 2007 - 18:49 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester