[VB6] การค้นหาคำ และการจำกัดความยาว (MaxLength) ใน ComboBox Control
http://www.g2gnet.com/webboard/images/vb6/ComboBoxSearch.pngลองกด s
http://www.g2gnet.com/webboard/images/vb6/ComboBoxMaxLength.png
ทดสอบเรียกใช้ฟังค์ชั่น Call MaxComboBox(Combo1, 10, KeyAscii)
โดยธรรมชาติของ Visual Basic 6 หรือ VB6 จะไม่คุณสมบัติ (Properties) หรือ Method โดยตรงใดๆในการค้นหาคำ หรือจำกัดความยาว (MaxLength) ในการป้อนข้อมูลลงไปใน ComboBox แต่ทว่าด้วยขีดความสามารถของ VB6 ที่มันถูกซ่อนเร้นเอาไว้ ด้วยการดึงพลังออกมาจาก Windows API (Application Programming Interface) ก็จะช่วยทำให้งานที่เป็นไปไม่ได้ ให้เป็นไปได้ ...'// หากไปประกาศใน Module ต้องแก้ไขให้เป็นตัวแปรแบบ Public
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
Private Const CB_FINDSTRING = &H14C
Private Const CB_ERR = (-1)การประกาศใช้ฟังค์ชั่น SendMessage ที่อยู่ใน Library และการประกาศตัวแปรแบบคงที่ (Constant)
มาดูโค้ดฉบับเต็ม ... อย่าลืมกำหนดตอน Design Time ให้ ComboBox มีคุณสมบัติ Style = 0 - DropDown Combo
' / -----------------------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
' / Facebook: https://www.facebook.com/commonindy (Worldwide)
' /
' / Purpose: Search data and limit length input on ComboBox.
' / Microsoft Visual Basic 6.0 Service Pack 6
' /
' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
' / You can modify and/or distribute without to inform the developer.
' / -----------------------------------------------------------------------------------------------
Option Explicit
'// หากไปประกาศใน Module ต้องแก้ไขให้เป็นตัวแปรแบบ Public
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
Private Const CB_FINDSTRING = &H14C
Private Const CB_ERR = (-1)
Private Sub Combo1_KeyPress(KeyAscii As Integer)
'/ ไปโปรแกรมย่อยในการค้นหาคำใน ComboBox โดยส่งค่าไป 2 ตัว
'/ ชื่อของ ComboBox และ KeyAscii ที่กดลงไป
Call SearchComboBox(Combo1, KeyAscii)
'/ จำกัดความยาวของการพิมพ์คำใน ComboBox
Call MaxComboBox(Combo1, 10, KeyAscii)
End Sub
Private Sub Form_Load()
With Combo1
.AddItem "Fruit"
.AddItem "Vetgetable"
.AddItem "Soft Drink"
.AddItem "Meat"
.AddItem "Water"
.AddItem "Snacks"
End With
Me.Combo1.ListIndex = 0
End Sub
' / -----------------------------------------------------------------------------------------------
' / โปรแกรมย่อยที่ช่วยจำกัดความยาวข้อมูลสำหรับ ComboBox
Private Sub MaxComboBox(cmb As ComboBox, MaxChar As Integer, KeyAscii As Integer)
If Len(cmb.Text) >= MaxChar Then '// ถ้าหากมีความยาวมากกว่า หรือ เท่ากับที่ได้ตั้งไว้
If KeyAscii <> vbKeyBack Then '// เป็นการกดคีย์ Back Space หรือไม่
KeyAscii = 0 '// ไม่ใช่ให้ถือว่าไม่ได้กดคีย์ใดๆเลย
End If
End If
End Sub
' / -----------------------------------------------------------------------------------------------
' / โปรแกรมย่อยในการค้นหาคำในรายการของ ComboBox
Private Sub SearchComboBox(cmb As ComboBox, KeyAscii As Integer)
Dim strKey As String, iRet As Long, LenKey As Long
cmb.SelText = ""
strKey = cmb.Text & Chr$(KeyAscii)
iRet = SendMessage(cmb.hwnd, CB_FINDSTRING, -1, ByVal strKey)
If iRet <> CB_ERR Then
LenKey = Len(strKey)
cmb.Text = cmb.List(iRet)
cmb.ListIndex = iRet
KeyAscii = 0
cmb.SelStart = LenKey
cmb.SelLength = Len(cmb.Text) - LenKey
End If
End Sub
หน้า:
[1]