PDA

Vollständige Version anzeigen : Farbänderung


Benedict
02.05.2001, 18:02
Hallo!
Ich möchte die Hintergrundfarbe verschiedener Elemente verändern. Muß ich jedes einzelne Element aufführen

Form1.BackColor = &HFFC0C0
Frame1.BackColor = &HFFC0C0
Command1.BackColor = &HFFC0C0
Line1.BackColor = &HFFC0C0
Option2.BackColor = &HFFC0C0
....

oder geht das auch schneller?

Danke im Vorraus
Benedict

Alexander Jan Peters
02.05.2001, 23:06
<pre>

<font color="#000000" size="2" face="Tahoma">Hallo,

ich komme zwar mehr aus der VBA-Ecke, aber benutz' doch eine Schleife über die Controls-Auflistung des Formulars:

etwa so (wenn Sie einheitlich z.B. XButton1, XFrame2 usw. benannt sind):</font></p>

<font color="#000000" size="2" face="Courier New">For each ctl in frm.Controls
If Left(ctl.Name,1) = "X" Then
'Alternative: ctl.Tag = "X" o.ä.
.BackColor = &HFFC0C0
End If
Next</font></p>

<font color="#000000" size="2" face="Tahoma">Die Sache mit der Tag-Eigenschaft halte ich für die bessere Lösung (s.Alternative).

Gruß

A.J. Peters</font></pre>

Stefan Kulpa
03.05.2001, 07:45
Hallo Benedict,

vielleicht geht's wie folgt etwas schneller:

<PRE><FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Sub</FONT> ChangeBackColors(lColor <FONT COLOR=#000080>As</FONT> VBRUN.SystemColorConstants)

<FONT COLOR=#000080>Dim</FONT> ctr <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Control</FONT>

<FONT COLOR=#000080>On</FONT> <FONT COLOR=#000080>Error</FONT> Resume <FONT COLOR=#000080>Next</FONT>
<FONT COLOR=#000080>For</FONT> Each ctr In Controls
ctr.BackColor = lColor
<FONT COLOR=#000080>Next</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>

</FONT></PRE>

Zumindest in VB hast Du die Möglichkeit, auf die VB-Konstanten zuzugreifen. Das hat den Vorteil, dass Du Dich an die Farben im System anpasst (falls der Anwender eigene Farben definiert hat).
Die Übergabe als VBRUN.SystemColorConstants läßt sich natürlich auch in Long ändern, um eigene Werte zu übergeben.
In der Methode steht 'On Error Resume Next', was hier leider notwendig ist, da nicht jedes Control die Eigenschaft BackColor besitzt. Um nun aber nicht jedes Control überprüfen zu müssen, halte ich das hinsichtlich Geschwindigkeit für akzeptabel.

Gruß