Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Visual Basic
Expertise: Intermediate
Dec 9, 1998

Type-o-matic Text Box

This code creates a smart input box. Every time you type something into this text box, the first letters of your string are compared against the members of a hidden list box. The code guesses how your string should be completed and finishes it for you, similar to how the latest versions of Microsoft Excel and Internet Explorer behave.

To use this technique, add a list box to your form and set its Visible property to False. This example fills the list at Form_Load with some likely selections. In a real app, you'd add a new element to the list after each user entry is completed. Add this code to the form containing the text and list boxes:

 
Option Explicit

#If Win32 Then
	Private Const LB_FINDSTRING = &H18F
	Private Declare Function SendMessage Lib _
		"User32" Alias "SendMessageA" (ByVal _
		hWnd As Long, ByVal wMsg As Long, _
		ByVal wParam As Long, lParam As Any) _
		As Long
#Else
	Private Const WM_USER = &H400
	Private Const LB_FINDSTRING = (WM_USER + 16)
	Private Declare Function SendMessage Lib _
		"User" (ByVal hWnd As Integer, ByVal _
		wMsg As Integer, ByVal wParam As _
		Integer, lParam As Any) As Long
#End If

Private Sub Form_Load()
	List1.AddItem "Orange"
	List1.AddItem "Banana"
	List1.AddItem "Apple"
	List1.AddItem "Pear"
End Sub

Private Sub Text1_Change()
	Dim pos As Long
	List1.ListIndex = SendMessage( _
		List1.hWnd, LB_FINDSTRING, -1, ByVal _
		CStr(Text1.Text))
	If List1.ListIndex = -1 Then
		pos = Text1.SelStart
	Else
		pos = Text1.SelStart
		Text1.Text = List1
		Text1.SelStart = pos
		Text1.SelLength = Len(Text1.Text) - pos
	End If
End Sub

Private Sub Text1_KeyDown(KeyCode As _
	Integer, Shift As Integer)
	On Error Resume Next
	If KeyCode = 8 Then 'Backspace
 		If Text1.SelLength <> 0 Then
			Text1.Text = Mid$(Text1, 1, _
				Text1.SelStart - 1)
			KeyCode = 0
		End If
	ElseIf KeyCode = 46 Then 'Del
		If Text1.SelLength <> 0 And _
			Text1.SelStart <> 0 Then
			Text1.Text = ""
			KeyCode = 0
		End If
	End If
End Sub
Paolo Marozzi
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date