jwcolby
jwcolby at colbyconsulting.com
Tue Oct 27 21:34:49 CDT 2009
OK for the "scan the controls once" issue the classes end up looking much the same, with the
scanning moved entirely out of the clsCtlsSorted.
'
'clsCtlsSorted2
'
Option Compare Database
Option Explicit
Private mstrObjName As String
Private mcolCtlsSorted As Collection
Private Sub Class_Initialize()
Set mcolCtlsSorted = New Collection
End Sub
Private Sub Class_Terminate()
Set mcolCtlsSorted = Nothing
End Sub
'
'Pass in any collection of controls to be stored in sorted order
'
Function mInit(lstrObjName As String)
mstrObjName = lstrObjName
End Function
Property Get pObjName() As String
pObjName = mstrObjName
End Property
'
'Return the collection of controls in sorted order (keyed on TabIndex)
'
Property Get pCtlsSorted() As Collection
Set pCtlsSorted = mcolCtlsSorted
End Property
'
'Iterate the collection of controls getting each control name
'and appending it to a string
'
'---------------------------------------------------------------------------------------
' Procedure : pCtlNames
' Author : jwcolby
' Date : 10/27/2009
' Purpose :
'---------------------------------------------------------------------------------------
'
Property Get pCtlNames() As String
Dim ctl As Control
Dim strCtlNames As String
Dim intIndex As Integer
On Error GoTo Err_pCtlNames
strCtlNames = pObjName & ":: " & vbCrLf
For Each ctl In mcolCtlsSorted
strCtlNames = strCtlNames & vbTab & ctl.Name
Next ctl
pCtlNames = strCtlNames
Exit_pCtlNames:
On Error Resume Next
Exit Property
Err_pCtlNames:
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_pCtlNames
End Select
Resume 0 '.FOR TROUBLESHOOTING
End Property
Function mAddCtl(ctl As Control)
On Error Resume Next
mcolCtlsSorted.Add ctl, CStr(ctl.TabIndex)
End Function
'
'Sorts the controls in mcolCtlsSorted into sorted order
'
'---------------------------------------------------------------------------------------
' Procedure : mSortcontrols
' Author : jwcolby
' Date : 10/27/2009
' Purpose :
'---------------------------------------------------------------------------------------
'
Function mSortcontrols()
Dim ctl As Control
Dim intIndex As Integer
Dim col As Collection
On Error GoTo Err_mSortcontrols
Set col = New Collection
With mcolCtlsSorted
If .Count Then 'Check that there are controls in mcolCtlsSorted
For intIndex = 0 To .Count - 1 'Iterate through mcolCtlsSorted
col.Add .Item(CStr(intIndex)) 'Copying the controls into the temp collection
Next intIndex
End If
End With
'
'If there are any controls in the temp collection then
'set the main collection to the temp collection
If col.Count Then
Set mcolCtlsSorted = col
End If
Exit_mSortcontrols:
On Error Resume Next
Exit Function
Err_mSortcontrols:
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_mSortcontrols
End Select
Resume 0 '.FOR TROUBLESHOOTING
End Function
John W. Colby
www.ColbyConsulting.com
A.D.Tejpal wrote:
> JC,
>
> Thanks for providing a nice class based solution so promptly. Your well
> known command over classes deserves to be complimented.