[vb] Veel objecten in 1 keer veranderen

Pagina: 1
Acties:

  • redah
  • Registratie: Januari 2001
  • Laatst online: 24-08 21:04
Heya,

Ik heb dus een programmaatje dat ik wil skinnen... hij doet nu dus het volgende

code:
1
2
3
For Each Label In frmMain
    Label.Caption = "MOOO"
Next Label


Heel mooi allemaal... dit is even een voorbeeldje het is dus de bedoeling dat ik kleuren verander straks maar dat is het probleem niet.

Als ik dit in een leeg Project neerzet, dan werkt het perfect. Zodra ik op n knoppie druk veranderen alle Labels in "MOOO".

Zet ik het nu in m'n huidige project... dan krijg ik Runtime Error 438, en wel met de melding: "Object doesn't support this property or method".

En waarom hij het in een leeg project wel doet, maar in m'n huidige niet... da's mij een raadsel.

Help? :)

Verwijderd

mss dat het zo wel lukt

code:
1
2
3
For Each Label In Form1.Controls
    Label.Caption = "MOOO"
Next


kan de error ook niet direct verklaren, maar met jou code krijg ik ok nog wat errors

edit:
Form1 == frmMain bij jou uiteraard ...

[ Voor 14% gewijzigd door Verwijderd op 01-02-2003 17:00 . Reden: zie edit : ]


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 24-08 18:20

johnwoo

3S-GTE

Blijkbaar heb je ook controls op je form staan die geen Caption property hebben :)

Oplossing: voor iedere control checken of het een label is:
Visual Basic .NET:
1
2
3
4
5
    For Each Control In frmMain
        If TypeOf Control Is Label Then
            Control.Caption = "mooh"
        End If
    Next

[ Voor 58% gewijzigd door johnwoo op 01-02-2003 17:04 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • redah
  • Registratie: Januari 2001
  • Laatst online: 24-08 21:04
johnwoo schreef op 01 februari 2003 @ 17:00:
Blijkbaar heb je ook controls op je form staan die geen Caption property hebben :)
Neemt ie toch niet mee, hij moet alleen Labels pakken toch?

  • redah
  • Registratie: Januari 2001
  • Laatst online: 24-08 21:04
Verwijderd schreef op 01 February 2003 @ 16:59:
mss dat het zo wel lukt

code:
1
2
3
For Each Label In Form1.Controls
    Label.Caption = "MOOO"
Next


kan de error ook niet direct verklaren, maar met jou code krijg ik ok nog wat errors

edit:
Form1 == frmMain bij jou uiteraard ...
Zelfde foutmelding nog :( Het debuglijntje komt op Label.Caption te staan... wel logisch ook... maar toch, hij zou dingen die geen Caption hebben niet eens moeten checken volgens mij.

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 24-08 18:20

johnwoo

3S-GTE

redah schreef op 01 February 2003 @ 17:03:
[...]


Neemt ie toch niet mee, hij moet alleen Labels pakken toch?
Nope, de Controls collection is de default property van een form.
For Each bla In frmMain is dus exact hetzelfde als For Each bla In frmMain.Controls, en geeft alle controls op de form, ongeacht hun types. Dat jij de object reference toevallig Label noemt wil niks zeggen :) Zie mijn edit hierboven voor de oplossing :)

[ Voor 6% gewijzigd door johnwoo op 01-02-2003 17:08 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • redah
  • Registratie: Januari 2001
  • Laatst online: 24-08 21:04
johnwoo schreef op 01 februari 2003 @ 17:00:

Oplossing: voor iedere control checken of het een label is:
Visual Basic .NET:
1
2
3
4
5
    For Each Control In frmMain
        If TypeOf Control Is Label Then
            Control.Caption = "mooh"
        End If
    Next
Dat werkt :D Nog steeds heel vreemd toch

Verwijderd

Heb je label gedeclareerd.

dan mag hij volgens mij niet die andere pakken.
Dim Label As Label

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 24-08 18:20

johnwoo

3S-GTE

Verwijderd schreef op 01 February 2003 @ 17:07:
Heb je label gedeclareerd.

dan mag hij volgens mij niet die andere pakken.
Dim Label As Label
Nope dat gaat ook niet werken, dan krijg je een type mismatch als je een control van een ander type naar een Label probeert te coercen :) Het gebruik van TypeOf is een goede oplossing. Je zou het ook nog met de Tag property kunnen doen: geef alle controls die je wilt veranderen een speciale Tag (ieder control type heeft een Tag property, dus je zult geen error krijgen). Vervolgens voer je in je loop alleen de actie uit op de controls die die tag hebben :)

[edit]
Oh, en voor topicstarter, je gebruikt toch wel Option Explicit he :P
Je kan de object reference die je in je For Each gebruikt declareren As Control, of desnoods As Object (dan heb je em iets ruimer, maar da's niet nodig. As Control is de juiste manier :) )
Zo dus:
Visual Basic .NET:
1
2
3
4
5
6
7
8
Private Sub cmdMooh_Click()
    Dim Control As Control
    For Each Control In frmMain.Controls
        If TypeOf Control Is Label Then
            Control.Caption = "Mooh!"
        End If
    Next
End Sub

[ Voor 32% gewijzigd door johnwoo op 01-02-2003 17:14 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1

Pagina: 1