|
ลองกด s
ทดสอบเรียกใช้ฟังค์ชั่น 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
คัดลอกไปที่คลิปบอร์ด
|
|