Click to See Complete Forum and Search --> : Setting the TabIndex property of every control on a form


Sandeep Kumar SinghDeo
January 13th, 1999, 11:35 PM
Hi

Here I am attaching the original code written by Timothy H. Fielder [Timf@ueplaza.com] and Edited by--Scott Lewis [Slewis@vcce.com] for Setting tab index of different control in a form programmatically and also listing the problem I am facing :


I am getting problems with the code when the form has picture box. An error the property cannot be set is coming.

One more problem if the form has a frame with option buttons the focus is first going to the frame instead of the first control on the form say Text box.

The next problem I faced is if check boxes are placed in the frame then only the first check box is getting the focus. The other check boxes are being skipped and the focus is jumping to the next control outside the frame.


Can please check it out. If the code is corrected for the above then it will be really very useful for all of us.


Thanks & Regards

Sandeep



-----------------------------------------------------------------


Setting the TabIndex property of every control on a form

Written by Timothy H. Fielder [Timf@ueplaza.com] and

Edited by--Scott Lewis [Slewis@vcce.com]


If you're like me, you hate having to go back and set the TabIndex

property on every control on a form every time the placement of controls

change. You can use the following subroutine to set the TabIndex property

of every control on a form from top to bottom, left to right. This comes

in especially handy on complex data entry forms with many labels, text

boxes, and command buttons.


Enter the following code in a form:


Private Sub Form_Load()

Call SetTabOrder(Me)

End Sub


Sub SetTabOrder(frm As Form)

Dim FormControl, CurrTop, CurrLeft, ctlControl


'-- Loop through all controls on the form

For ctlControl = 0 To frm.Count

CurrTop = 0 'set starting top

CurrLeft = 0 'set starting left


'-- Check every control on the form

For Each FormControl In frm.Controls

'-- Check if the control hasn't already been set

If FormControl.Tag True Then

'-- If current control's TOP property is greater than

'-- Start TOP, set new comparison value

If FormControl.Top > CurrTop Then

CurrTop = FormControl.Top

CurrLeft = FormControl.Left

'-- Control's top property is equal

ElseIf FormControl.Top = CurrTop Then

'-- If current control's LEFT property is greater than

'-- Start LEFT, set new comparison value

If FormControl.Left > CurrLeft Then

CurrTop = FormControl.Top

CurrLeft = FormControl.Left

End If

End If

End If

Next FormControl


'-- Check every control on the form if the top and left of

'-- the control match the top and left of largest control

For Each FormControl In frm.Controls

If FormControl.Top = CurrTop And _

FormControl.Left = CurrLeft Then

'-- set it's tabindex to 0 which will move all previously

'-- set tabindexes to 1 larger than they are now

FormControl.TabIndex = 0

'-- Do not process again

FormControl.Tag = True

End If

Next FormControl

Next

End Sub


From--Timothy H. Fielder [Timf@ueplaza.com]


Edited by--Scott Lewis [Slewis@vcce.com]

Contributing Editor, Inside Visual Basic