[AccessD] Form Controls - Class implementation

jwcolby jwcolby at colbyconsulting.com
Mon Oct 26 12:29:02 CDT 2009


Second class - the supervisor:

Option Compare Database
Option Explicit

Private colClsCtlsSorted As Collection

Private Sub Class_Initialize()
     Set colClsCtlsSorted = New Collection
End Sub

Private Sub Class_Terminate()
     Set colClsCtlsSorted = Nothing
End Sub

Function mInit(frm As Form)
     mScanFormForSections frm
End Function
'
'Returns a string of all controls and what object they belong to
'
Property Get pCtlNames() As String
Dim lclsCtlsSorted As clsCtlsSorted
Dim strCtlNames As String

     For Each lclsCtlsSorted In colClsCtlsSorted
         strCtlNames = strCtlNames & lclsCtlsSorted.pCtlNames() & vbCrLf
     Next lclsCtlsSorted
     pCtlNames = strCtlNames
     Debug.Print strCtlNames
End Property

'
'The class factory creates an instance of clsCtlsSorted,
'passing in the name of the object in the form
'that contained the controls collection
'
'After the class is instantiated and initialized,
'the instance is stored in colClsCtlsSorted
'keyed on the name of the object that contained the controls collection
'
Private Function mClassFactory(lstrObjName As String, colControls As Object, blnIsSection As Boolean)
Dim lclsCtlsSorted As clsCtlsSorted
     Set lclsCtlsSorted = New clsCtlsSorted
     lclsCtlsSorted.mInit lstrObjName, colControls, blnIsSection
     colClsCtlsSorted.Add lclsCtlsSorted, lstrObjName
End Function
'
'Return the entire collection of all instances of clsCtlSorted
'
Property Get colClsControlsSorted() As Collection
     Set colClsControlsSorted = colClsCtlsSorted
End Property
'
'Return a clsCtlSorted instance for a specific object (tab, form section etc)
'
'strObjName is the name of the tab page, control section etc.
'
Function cControlsSorted(strObjName As String) As clsCtlsSorted
     On Error Resume Next
     Set cControlsSorted = colClsCtlsSorted(strObjName)
End Function
'
'Finds every section of a form
'Having found any valid section, it creates an
'instance of clsCtlsSorted for that section
'
'---------------------------------------------------------------------------------------
' Procedure : mScanFormForSections
' Author    : jwcolby
' Date      : 10/26/2009
' Purpose   :
'---------------------------------------------------------------------------------------
'
Function mScanFormForSections(frm As Form)
Dim sec As Section
Dim intSection As Integer
On Error GoTo Err_mScanFormForSections

     On Error Resume Next
     For intSection = 0 To 4                         'There are only 5 sections in a form
         Set sec = frm.Section(intSection)               'Test to see if the section exists
         If Err = 0 Then                             'The section exists so
On Error GoTo Err_mScanFormForSections
             mClassFactory sec.Name, sec.Controls(), True    'Get an instance of lclsCtlsSorted
             mScanSectionForControls sec             'Now scan the section for tab controls
         Else
             Err.Clear
         End If
     Next intSection

Exit_mScanFormForSections:
     On Error Resume Next
     Exit Function
Err_mScanFormForSections:
     Select Case Err
     Case 0      '.insert Errors you wish to ignore here
         Resume Next
     Case Else   '.All other errors will trap
         Beep
         MsgBox Err.Number & ":" & Err.Description
         Resume Exit_mScanFormForSections
     End Select
     Resume 0    '.FOR TROUBLESHOOTING
End Function
'
'Sections can contain tabs
'which contain pages which contain controls
'
Function mScanSectionForControls(sec As Section)
Dim ctl As Control
     For Each ctl In sec.Controls            'Iterate the section's contyrol collection
         If ctl.ControlType = acTabCtl Then  'Look for tab controls
             mScanTabForPages ctl            'Look for pages of the tab control
         End If
     Next ctl
End Function
'
'Find all pages of a tab control
'
Function mScanTabForPages(ctlTab As Control)
Dim pg As page
     For Each pg In ctlTab.Pages                                 'Iterate the page collection
         mClassFactory ctlTab.Name & "." & pg.Name, pg.Controls, False  'Get an instance of 
lclsCtlsSorted for the page
     Next pg
End Function

John W. Colby
www.ColbyConsulting.com


A.D.Tejpal wrote:
> Run time handling of form controls in the order of tab index.
> ========================================
> 
>     Use of a collection as suggested by J.C., appears to be the optimum 
> approach, provided the point raised by Ken is addressed suitably. A form 
> having three tab controls each with 4 pages, would need 15 collections as 
> each form section or tab control page has its own set of tab indices for 
> controls located therein.
> 
>     There could be an interesting way to handle this requirement 
> conveniently by adoption of a single collection where each of its elements 
> is itself a collection, permitting a generic subroutine to handle unlimited 
> number of tab control pages apart from the three form sections (detail, 
> header & footer)




More information about the AccessD mailing list