Sort TextBox by position in VB
Sort TextBox in order by position inside a Winform is not a build in function inside Visual Basic or inside Visual Studio. For a long time, I had to place them in order inside my Winform or renumber the TabIndex properties once my form is completed. It is a pain in the ass. So I decided to build a small function for everyone who reads this.
I haven�t made a code to complicate. The code is good enough for a normal amount of TextBox inside a form. If your form contains over 100 TextBox, your might change the type of sorting for a faster algorithm.
Download the Code Project
Here is a sample project for this article. I use Framework .NET 4.0 and Microsoft Visual Studio 2010 to build this project. Here is a video:
Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Sort_TextBox() End Sub ''' <summary> ''' Description: This Function helps reorder every TextBox inside a Form. ''' TabIndex will be changed base on the position inside the form. ''' That way, when a user press TAB on his keyboard, ''' the cursor will go to the next TextBox on the left or in the buttom. ''' ''' This function is very simple and fast enough for small amount of TextBox. ''' ''' Date: July 31st 2013 ''' Author : Check-Kay Wong ''' </summary> ''' <remarks>You could make this function better if it handles other types of Windows.Forms.Controls such as ListBox or ComboBox</remarks> Private Sub Sort_TextBox() Dim index1 As Integer Dim index2 As Integer Dim index3 As Integer Dim ctr As Windows.Forms.Control Dim oType As System.Type Dim TextBox_temp As Windows.Forms.TextBox Dim myCollection_Object1 As Windows.Forms.TextBox Dim myCollection As List(Of TextBox) Dim item_to_Sort As Boolean myCollection = New List(Of TextBox) For index1 = 0 To Me.Controls.Count - 1 ctr = Me.Controls.Item(index1) oType = ctr.GetType '---------------------------- 'TextBox.Text = TextBox.Name '---------------------------- item_to_Sort = False If oType.Name = "TextBox" Then TextBox_temp = CType(ctr, Windows.Forms.TextBox) TextBox_temp.Text = TextBox_temp.Name item_to_Sort = True End If '---------------------------- ' 2 dimensions sorting '---------------------------- If item_to_Sort = True Then If myCollection.Count = 0 Then 'the first item for an empty collection myCollection.Add(TextBox_temp) Else 'for all other items, please insert inside the myCollection 'is a 1 dimension array 'some people could see it as a 2D sort index2 = 0 index3 = myCollection.Count Do myCollection_Object1 = myCollection.Item(index2) If myCollection_Object1.Top > TextBox_temp.Top Then myCollection.Insert(index2, TextBox_temp) Exit Do ElseIf myCollection_Object1.Top = TextBox_temp.Top Then If myCollection_Object1.Left > TextBox_temp.Left Then myCollection.Insert(index2, TextBox_temp) Exit Do ElseIf myCollection_Object1.Left < TextBox_temp.Left Then index2 = index2 + 1 ElseIf myCollection_Object1.Left = TextBox_temp.Left Then '2 textbox with same top value en same left value.... myCollection.Insert(index2, TextBox_temp) Exit Do End If ElseIf myCollection_Object1.Top < TextBox_temp.Top Then index2 = index2 + 1 End If 'index2 = index2 + 1 Loop Until index2 >= myCollection.Count 'place item at the end if can't plat it between any item If index3 = myCollection.Count Then myCollection.Insert(index2, TextBox_temp) End If End If End If Next '---------------------------- ' new sort, change TabIndex '---------------------------- For index1 = 0 To myCollection.Count - 1 myCollection_Object1 = myCollection.Item(index1) myCollection_Object1.TabIndex = index1 Next End Sub End Class |
Update Contact :
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email : Fajarudinsidik@gmail.com
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email: Fajarudinsidik@gmail.com
atau Kirimkan Private messanger melalui email dengan klik tombol order dibawah ini :