ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4956|ตอบกลับ: 1

[VB6] การค้นหาคำ และการจำกัดความยาว (MaxLength) ใน ComboBox Control

[คัดลอกลิงก์]

319

กระทู้

511

โพสต์

6462

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6462


ลองกด s

ทดสอบเรียกใช้ฟังค์ชั่น Call MaxComboBox(Combo1, 10, KeyAscii)


โดยธรรมชาติของ Visual Basic 6 หรือ VB6 จะไม่คุณสมบัติ (Properties) หรือ Method โดยตรงใดๆในการค้นหาคำ หรือจำกัดความยาว (MaxLength) ในการป้อนข้อมูลลงไปใน ComboBox แต่ทว่าด้วยขีดความสามารถของ VB6 ที่มันถูกซ่อนเร้นเอาไว้ ด้วยการดึงพลังออกมาจาก Windows API (Application Programming Interface) ก็จะช่วยทำให้งานที่เป็นไปไม่ได้ ให้เป็นไปได้ ...
  1. '// หากไปประกาศใน Module ต้องแก้ไขให้เป็นตัวแปรแบบ Public
  2. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
  3.     ByVal hwnd As Long, _
  4.     ByVal wMsg As Long, _
  5.     ByVal wParam As Long, _
  6.     lParam As Any _
  7.     ) As Long
  8.    
  9. Private Const CB_FINDSTRING = &H14C
  10. Private Const CB_ERR = (-1)
คัดลอกไปที่คลิปบอร์ด
การประกาศใช้ฟังค์ชั่น SendMessage ที่อยู่ใน Library และการประกาศตัวแปรแบบคงที่ (Constant)

มาดูโค้ดฉบับเต็ม ... อย่าลืมกำหนดตอน Design Time ให้ ComboBox มีคุณสมบัติ Style = 0 - DropDown Combo
  1. ' / -----------------------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' /
  8. ' / Purpose: Search data and limit length input on ComboBox.
  9. ' / Microsoft Visual Basic 6.0 Service Pack 6
  10. ' /
  11. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  12. ' / You can modify and/or distribute without to inform the developer.
  13. ' / -----------------------------------------------------------------------------------------------
  14. Option Explicit

  15. '// หากไปประกาศใน Module ต้องแก้ไขให้เป็นตัวแปรแบบ Public
  16. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
  17.     ByVal hwnd As Long, _
  18.     ByVal wMsg As Long, _
  19.     ByVal wParam As Long, _
  20.     lParam As Any _
  21.     ) As Long
  22.    
  23. Private Const CB_FINDSTRING = &H14C
  24. Private Const CB_ERR = (-1)

  25. Private Sub Combo1_KeyPress(KeyAscii As Integer)
  26.         '/ ไปโปรแกรมย่อยในการค้นหาคำใน ComboBox โดยส่งค่าไป 2 ตัว
  27.         '/ ชื่อของ ComboBox และ KeyAscii ที่กดลงไป
  28.         Call SearchComboBox(Combo1, KeyAscii)
  29.         
  30.         '/ จำกัดความยาวของการพิมพ์คำใน ComboBox
  31.         Call MaxComboBox(Combo1, 10, KeyAscii)
  32. End Sub

  33. Private Sub Form_Load()
  34.     With Combo1
  35.         .AddItem "Fruit"
  36.         .AddItem "Vetgetable"
  37.         .AddItem "Soft Drink"
  38.         .AddItem "Meat"
  39.         .AddItem "Water"
  40.         .AddItem "Snacks"
  41.     End With
  42.     Me.Combo1.ListIndex = 0
  43. End Sub

  44. ' / -----------------------------------------------------------------------------------------------
  45. ' / โปรแกรมย่อยที่ช่วยจำกัดความยาวข้อมูลสำหรับ ComboBox
  46. Private Sub MaxComboBox(cmb As ComboBox, MaxChar As Integer, KeyAscii As Integer)
  47.      If Len(cmb.Text) >= MaxChar Then '// ถ้าหากมีความยาวมากกว่า หรือ เท่ากับที่ได้ตั้งไว้
  48.          If KeyAscii <> vbKeyBack Then '// เป็นการกดคีย์ Back Space หรือไม่
  49.               KeyAscii = 0 '// ไม่ใช่ให้ถือว่าไม่ได้กดคีย์ใดๆเลย
  50.          End If
  51.     End If
  52. End Sub

  53. ' / -----------------------------------------------------------------------------------------------
  54. ' / โปรแกรมย่อยในการค้นหาคำในรายการของ ComboBox
  55. Private Sub SearchComboBox(cmb As ComboBox, KeyAscii As Integer)
  56.     Dim strKey As String, iRet As Long, LenKey As Long
  57.     cmb.SelText = ""
  58.     strKey = cmb.Text & Chr$(KeyAscii)
  59.     iRet = SendMessage(cmb.hwnd, CB_FINDSTRING, -1, ByVal strKey)
  60.     If iRet <> CB_ERR Then
  61.         LenKey = Len(strKey)
  62.         cmb.Text = cmb.List(iRet)
  63.         cmb.ListIndex = iRet
  64.         KeyAscii = 0
  65.         cmb.SelStart = LenKey
  66.         cmb.SelLength = Len(cmb.Text) - LenKey
  67.     End If

  68. End Sub
คัดลอกไปที่คลิปบอร์ด

สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

1

โพสต์

20

เครดิต

Newbie

Rank: 1

เครดิต
20
โพสต์ 2024-8-7 15:39:27 | ดูโพสต์ทั้งหมด

อ. จะสามารถใช้กับ Control "DataCombo" ได้หรือไม่?
ถ้าได้ อ. เสนอ Code VB6 ให้ดูได้หรือเปล่าครับ
นับถือ
ขอบคุณ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-10-5 07:51 , Processed in 0.139723 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้