Finns det något sätt man kan färga forecolor på alla labels på en form till en viss färg? Alltså, om jag har 100 labels på en form vill jag tex att alla ska bli vita och enda sättet jag känner till att ändra färgen på dem när dormen startar är att skriva en massa rader på load men det känns lite dumt ;) Ett sätt att göra det på är: Du skulle kunna göra en control array och sen använda en For sats... Hej! Använd inte Late Bindings. Du använder Early bindings genom att deklarera en variablen som Label: >Använd inte Late Bindings Självklart kan man ju räkna med att Andreas H kommer in och tillrättavisar oss och lär oss hur det är bäst att göra!Färga labels
Sv: Färga labels
<code>
dim ctrl
For Each ctrl In Me.Controls
If TypeOf ctrl Is Label Then
ctrl.ForeColor = vbRed
End If
Next
</code>Sv: Färga labels
Gör såhär:
Lägg ut en label och byt till önskat namn, sen kopierar du den, då kommer det upp en fråga om du vill göra en control array, välj Ja. Då kommer det en label till som heter NamnetPaLabel(1). Sen kan du kopiera in så många labels som du vill ha.
Sen använder du koden nedan:
<code>
For i = 0 To NamnPaLabel.Count - 1
NamnPaLabel(i).ForeColor = vbRed
Next 'i
</code>
EDIT: Jag hade nog kört på Buddas förslag, det är lite enklare!
/MickeSv: Färga labels
Prova den här koden
<code>
Dim X As Control
For Each X In Controls
If TypeOf X Is Label Then
X.ForeColor = RGB(255, 255, 255)
End If
Next X
</code>Sv: Färga labels
<code>
Dim ctrl As Control
Dim Label As Label
For Each ctrl In Me.Controls
If TypeOf ctrl Is Label Then
Set Label = ctrl
Label.ForeColor = vbBlue
End If
Next
</code>
Om du har 100 kontroller så antara jag att du även har en del andra kontroller. Då kan du spara lite prestanda genom att lagra dem i en Collection:
<code>
Option Explicit
Private mLabels As Collection
Private Sub Command1_Click()
Dim Label As Label
For Each Label In mLabels
Label.ForeColor = vbBlue
Next
End Sub
Private Sub Command2_Click()
Dim Label As Label
For Each Label In mLabels
Label.ForeColor = vbRed
Next
End Sub
Private Sub Form_Load()
Dim ctrl As Control
Set mLabels = New Collection
For Each ctrl In Me.Controls
If TypeOf ctrl Is Label Then
mLabels.Add ctrl
End If
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Do While mLabels.Count
mLabels.Remove 1
Loop
Set mLabels = Nothing
End Sub
</code>Sv: Färga labels
Skälen till att man inte bör använda late binding är två:
1. Det är felbenäget
2. Det är ineffektivt
Att det är felbenäget är beror på att man inte kan veta om objektet är av en viss typ eller inte, att det är ineffektivt beror på att programmet måste kontrollera om det går att hitta den funktion man efterfrågar. Det första skälet blir inte mer avhjälpt med din metod, du gör fortfarande samma kontroll och du vet vad objektet kan klara.
Det blir knappast mer effektivt med en extra tilldelning...
/Niklas JanssonSv: Färga labels
Bra jobbat Andreas och Tack(!) för där lärde jag mig något ;-)
/Fredrik