[AccessD] control labels

John Colby jcolby at colbyconsulting.com
Thu Oct 2 13:38:18 CDT 2003


In my framework I use the background color of a combo to denote that the
combo has dbl-click (open a data entry form) functionality.

In order to do this I use the following function to find any given control's
label:

'.Comments  :
'.Parameters:
'.Sets      :
'.Returns   :
'.Created by: John W. Colby
'.Created   : 6/17/02 11:22:19 AM
'
'Finds the label that "belongs to" any given control.
'
Function CtlLbl(ctlFindLbl As Control) As Label
On Error GoTo Err_CtlLbl
Dim ctl As Control
    For Each ctl In ctlFindLbl.Controls
        If ctl.ControlType = acLabel Then
            Set CtlLbl = ctl
        End If
    Next ctl
Exit_CtlLbl:
Exit Function
Err_CtlLbl:
    Select Case err
    Case 0      '.insert Errors you wish to ignore here
        Resume Next
    Case Else   '.All other errors will trap
        Beep
        MsgBox err.Description, , "Error in Function Utils.CtlLbl"
        Resume Exit_CtlLbl
    End Select
    Resume 0    '.FOR TROUBLESHOOTING
End Function

My combo class has a private label variable.  I use the function above to
find the label and set the class' label variable.

dim mlbl as label
    Set mlbl = CtlLbl(mcbo)

Having done this, the class can now directly manipulate the properties of
the label associated with the combo such as back color, forecolor, font etc.
For example

	if mcbo.text < 0 then
		mlbl.backcolor = vbRed
	else
		mlbl.backcolor = vbGreen
	endif

The problem is controls on a continuous form where the label is in the page
or form header don't have a label per se (in their controls collection), and
thus the function returns a null.  IOW I can't manipulate a label for a
COLUMN of controls the same way I can for an independent label directly
attached to a control.  And yes, I know the example above makes no sense for
a column of combos since different records could plus or negative.  However
I want to be able to say a column of combos can be dbl-clicked to open a
data entry form, and in this context it does make sense.

So I added a function to the combo class to allow me to pass in a reference
to a label, which is then stored in the label variable in the class.

'
'Connects a label to a combo - used for continuous forms where the label is
in the header etc.
'
Function ConnectLabel(llbl As Label)
    Set mlbl = llbl
End Function

I can now "assign" a label to a class instance using the syntax:

  colCombos.Item("cboIDPT").ConnectLabel lblIDPT

Therefore any code in the class that attempts to manipulate the label of the
control (combo in this case) "finds" a label to manipulate even though there
isn't one in the control.controls collection.

And IT WORKS!

John W. Colby
www.colbyconsulting.com



More information about the AccessD mailing list