PDA

Vollständige Version anzeigen : Felder einfärben


tornado
06.07.2001, 08:45
Hey Leute, da bin ich wieder mal ;)

Ich möchte bei meiner DB (A00) in einem Formular ("Aufträge edititeren")- das mit 5 Registern und rund 40 div. Text-und DropDown's ausgerüstet ist- das jeweilige aktive Element mit einer Hintergrundfarbe besser sichtbar gestalten.

Mein Versuch sieht bis jetzt so aus;

Option Compare Database
Const normalColor As Long = 16777215
Const datenColor As Long = 65280
Const activateColor As Long = 65535
Const warningColor As Long = 255

Private Sub Auftrags_Eingang_GotFocus()
Me![Auftrags-Eingang].BackColor = activateColor
End Sub

Private Sub Auftrags_Eingang_LostFocus()
If Me![Auftrags-Eingang].Value > "" Then
Me![Auftrags-Eingang].BackColor = datenColor
Else
Me![Auftrags-Eingang].BackColor = normalColor
End If
End Sub

Jetzt müsste ich jedoch für jedes einzelne Feld die gleiche Prozedur x-mal wiederholen.

Gibt es da vielleicht eine elegantere Lösung?

Beim Öffnen habe ich bereits einen guten Tip von Euch eingebaut, der mir den zweiten Teil automatisch abnimmt;

'
'**** Felder einfärben ****
'
Private Sub Form_Open(Cancel As Integer)
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Then
If ctl.Value > "" Then
ctl.BackColor = datenColor
Else
ctl.BackColor = normalColor
End If
End If
Next ctl
For Each ctl In Me.Controls
If ctl.ControlType = acComboBox Then
If ctl.Value > 0 Then
ctl.BackColor = datenColor
Else
ctl.BackColor = normalColor
End If
End If
Next ctl
End Sub

Ich denke jedoch dass die aktualisiereung nicht nur beim Öffnen sein sollte, sondern sofort nachdem das Feld verlassen wird.

Hat mir da jemand einen guten Tip??

Bedanke mich jetzt schon recht herzlich für Eure Mühe.

Roger

Kurt aus Kienitz
06.07.2001, 08:56
Hallo Roger,

Anstatt die Schleife über alle Controls beim Öffnen des Formulares zu machen, könntest Du diese in einem Modul ablegen.
Könnte ungefähr so aussehen:

Public Function CtrlColor(AktFrm As Form)

Dim ctl As Control

For Each ctl In AktFrm.Controls
If ctl.ControlType = acTextBox Then
If ctl.Value > "" Then
ctl.BackColor = datenColor
Else
ctl.BackColor = normalColor
End If
End If
Next ctl

For Each ctl In AktFrm.Controls
If ctl.ControlType = acComboBox Then
If ctl.Value > 0 Then
ctl.BackColor = datenColor
Else
ctl.BackColor = normalColor
End If
End If
Next ctl


End Function


In den Textfeldern des Formulares trägst Du dann bei den Ereignissen Beim Hineingehen und Beim Verlassen folgendes ein:

=CtrlColor([Formular])

HTH

tornado
06.07.2001, 12:34
Hallo Kurt

Hei, wau, Dein Vorschlag hat funktioniert, habe ihn soeben eigetippt.

Besten Dank :cool:

Hast' vielleicht auch noch eine Lösung für den ersten Teil? (nur aktives Feld einfärben). ;)

Gruss
Roger

Birgit Dannenberg
06.07.2001, 12:42
siehe 'Screen.ActiveControl'

hth Birgit

tornado
06.07.2001, 15:33
alles klar Leute

Jetzt funzt es so, wie ich mir das gedacht habe. :D

Nochmals besten Dank

Roger

Manuela Kulpa
06.07.2001, 16:08
<font face="Verdana" size="2">Hallo Roger,

... wenn du dir den ganzen „Heckmeck“ sparen willst, solltest du dir mal unter A2K im Formularentwurf den Befehl -> Format -> Bedingte Formatierung -> zu Gemüte tun. Z.B. könnte man den entsprechenden Feldern folgende Bedingung zuweisen:

<img src="http://www.Kulpa-Online.de/Image/BedingteFormatierung.gif" alt="Feld markieren - Format - Bedingte Formatierung - Bedingung hinterlegen">

Gleicher Effekt, aber ohne eine Zeile Code :)

Gruß
Manuela</font>

Ralf Pfiffer
06.07.2001, 17:24
Hallo tornado,

das einfärbe des aktuellen Steuerelemends get wohl am einfachsten wend du die Hindergrundfarbe z.B auf rot setzt und anschließen auf Transparet. Sobald das Steuerelemst den Fokus hat wird es rot.


Gruß Ralf

tornado
07.07.2001, 17:48
Hey Leute

Ihr seid alle einsame Spitze!

Habe alle Vorschläge mal durchgetestet und j e d e r hat funktioniert. :)

Da bleibt mir echt die Spucke weg! :D

Nochmals herzlichen Dank an alle!

Roger