หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 4 9 7 8 6 6 1

7 ธันวาคม พ.ศ.2549
695 Users On-Line.
Visitors - Page views
 8 2 3 6 5 7 9
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

การค้นหาข้อความที่มีอยู่ใน ListBox อย่างรวดเร็ว (API)

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 5/11/2549 10:41:00
(อ่าน : 23814) 


ตอนนี้ก็จะขอกล่าวถึง Control พื้นฐานที่ยอดนิยมอีกตัวหนึ่งใน Visual Basic นั่นก็คือ List Box โดยจะแสดงตัวอย่างในการที่ผู้ใช้งานพิมพ์ข้อความใดๆ ลงไปใน TextBox เพื่อค้นหาคำที่ตรงกันกับที่อยู่ใน ListBox หากข้อความตรงกัน ที่ Control ListBox ก็จะแสดงแถบแสงออกมาให้เห็น แต่ทางตรงกันข้าม หากไม่มีข้อความใดตรงกัน ก็จะไม่แสดงผลออกมา

แน่นอนครับว่า ในงานลักษณะแบบนี้ ก็คงหนีไม่พ้นต้องนำเอา Windows API (Application Programming Interface) ที่ถูกบรรจุเอาไว้ใน Visual Basic มาช่วยด้วยอยู่แล้ว โดยอาศัยเทคนิคของฟังค์ชั่น SendMessage (ปกติแล้ว Control หรือ Object แต่ละตัวนั้นมีการพูดคุยหรือติดต่อสื่อสารกันได้ ก็เพราะ SendMessage นี่แหละครับ) ด้วย LB_FINDSTRING (ListBox Find String - &H18F) สำหรับ ListBox เพื่อระบุตำแหน่งในส่วนที่ตรงกันกับตัวอักษรที่เราคีย์เข้าไป ดังนั้น Message ที่เราส่งไปยัง List Box มันก็คือ ค่าเลขจำนวนเต็มคงที่แบบ Global ในที่นี้ก็คือ 18F ฐานสิบหกนั่นเอง โดยที่ฟังค์ชั่น:

SendMessage(hWnd, LB_FINDSTRING, wParam, lParam)

เื่มื่อ

hWnd - กำหนด Handle Windows ให้ไปอยู่ที่ List box
wParam - ระบุตำแหน่งในการค้นหา ถ้ากำหนดให้มีค่าเป็น -1 แล้วก็จะเป็นการค้นหาำทั้งหมดที่มีอยู่ใน Control

lParam - ข้อความที่ต้องการค้นหา


เอาล่ะครับ เรามาเริ่มต้นทำงานกันเลยดีกว่า อันดับแรกก็คือ สร้างฟอร์ม Standard EXE ขึ้นมาใหม่ 1 ฟอร์ม (ชื่อ Form1) จากนั้นให้เลือก Control ใน ToolBox มา 2 ตัว ตัวแรกก็คือ
ListBox (ชื่อ List1) และ อีกตัวก็คือ TextBox (ชื่อ Text1) แล้วนำมาวางไว้บน Form1


ต่อไปให้ประกาศโค้ดดังข้างล่างนี้
ใต้ Option Explicit หรือ ส่วนของการประกาศทั่วไป (General
Declarations) ของ Form1:





 


 

Option Explicit
Const LB_FINDSTRING = &H18F

Private Declare Function SendMessage Lib "User32" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
lParam As Any) As Long

ส่วนของโค้ดที่จะอยู่ในฟอร์ม - Form1

Private Sub Form_Load()
List1.Clear
' เพิ่มรายการ (Item) เข้าไปไว้ใน ListBox

List1.AddItem "Apples"
List1.AddItem "Banana"
List1.AddItem "Bread"
List1.AddItem "Break"
Text1.Text = ""
End Sub

' เกิดเหตุการณ์เปลี่ยนแปลงใน TextBox

Private Sub Text1_Change()
List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal Text1.Text)
End Sub



ก็จบกระบวนการแล้ว เริ่มกด F5 เพื่อรันโปรแกรมได้เลยทันที จากนั้นให้คีย์ข้อความลงไปใน TextBox จะเห็นได้ว่าหากว่าเราป้อนข้อความลงไปใน TextBox แล้วไปตรงกับข้อความใดๆ ที่แสดงอยู่ใน ListBox ก็จะเกิดแถบแสง (Focus) แสดงให้เห็นบน ListBox


จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560