List Box และ Combo Box
List Box และ Combo Box ใช้สำหรับแสดงรายการให้ผู้ใช้เลือก และมีคุณสมบัติร่วมกันจำนวนมาก
List box
List box เป็นตัว control ที่ใช้แสดงรายการของตัวเลือก ตามค่าเริ่มต้นตัวเลือกจะแสดงเป็นคอลัมน์เดี่ยว แต่สามารถตั้งค่าให้เห็นหลายคอลัมน์ได้โดยตั้งค่าที่คุณสมบัติ Column ตามจำนวนคอลัมน์ที่ต้องการ ถ้าจำนวนตัวเลือกมีมากเกินกว่าที่จะแสดงได้ จะมีแถบเลื่อนให้โดยอัตโนมัติ
Private Sub Form_Load()
lstSource.AddItem "Ayuthaya"
lstSource.AddItem "Bangkok"
lstSource.AddItem "Phuket"
' และข้อมูลต่อไป
End Sub
แต่ตามความจริงวิธีการที่สะดวกในการอ่านจากฐานข้อมูล จะใช้คำสั่งวนรอบ เช่น For
Next, Do
Loop
For i = LBound(myData) to UBound(myData)
lstCode.AddItem myData(i)
Next
ในบางกรณีถ้าตัวเลือกมีมากอาจจะเก็บไว้ในไฟล์ข้อความ (Text file) ซึ่งสะดวกในการปรับปรุงค่า
และเมื่อต้องการแสดงค่าจึงใช้การอ่านค่าเข้ามา
Private Sub Form_Load()
Dim Item As String
On Error Goto Error_Handler
Open "list2.txt" For Input As #1
Do Until EOF(1)
Line Input #1, Item
List2.AddItem Item
Loop
Close #1
Exit Sub
Error_Handler:
MsgBox "ไม่สามารถโหลดข้อมูลของ List box"
End Sub
เมธอดในการเพิ่มตัวเลือก คือ AddItem และระบุตำแหน่งด้วยอากิวเมนต์ที่ 2
List1.AddItem "Zero", 0
การลบตัวเลือกออกจากรายการ ให้ใช้เมธอด RemoveItem หรือ Clear
List1.RemoveItem 0 ' ลบรายการแรก
List1.Clear ' ลบทั้งหมด
การค้นหาตัวเลือกที่ผู้ใช้เลือก คุณสมบัติ ListIndex จะส่งคืนค่าดัชนี ส่วนคุณสมบัติ Text ส่งข้อความ ถ้า ListIndex ส่งค่าเป็น -1 แสดงว่ายังไม่มีเลือก
If List1.ListIndex = -1 Then
MsgBox "ไม่มีการเลือกข้อมูล"
Else
MsgBox "ผู้ใช้เลือก " & List1.Text & " (#"
& List1.ListIndex & ")"
End If
ส่วน ListCount ส่งค่าเป็นจำนวนตัวเลือกในตัว control ร่วมกับคุณสมบัติ
List
For i = 1 To List1.ListCount - 1
Print "Item #" & i & " = " & List1.List(i)
Next
เมื่อมีการวาด List box บนฟอร์ม มีคุณสมบัติที่เกี่ยวข้องไม่มากนัก เช่น คุณสมบัติ Sorted ถ้าตั้งค่าเป็น True จะเรียงลำดับตัวอักษร และถ้าต้องการรายการหลายคอลัมน์ ให้กำหนดคุณสมบัติ Column ให้เหมาะกับการแสดงรายการ
การเพิ่มรายการของ List box และ Combo box ใช้เมธอด AddItem ควรจะกำหนดที่ Form_Load eventแต่ถ้าเพิ่มรายการควรคำสั่งวนรอบ เช่น For
Next หรือ While
Loop เนื่องจากการอ่านค่าเพื่อแสดงรายการมักจะอ่านจากฐานข้อมูล
Multi Select
การย้ายข้างรายการแบบการเลือกหลายรายการ เช่น จาก List box ด้านซ้าย (lstSource) ไปที่ List box ด้านขวา (lstSelect) โดยคำสั่งใช้คุณสมบัติ ListCount เพื่อรับทราบจำนวนรายการที่เลือก และใช้ Do
Loop ในการจัดการย้าย สำหรับวิธีย้ายเป็นการเพิ่มรายการที่ lstSelect แล้วลบรายการจาก lstSource จึงทำให้สามารถเลือกรายการแบบหลายรายการ
Dim i As Long
Do While i < lstSource.ListCount
If lstSource.Selected(i) Then
lstSelect.AddItem lstSource.List(i)
lstSource.RemoveItem i
Else
i = i + 1
End If
Loop
สำหรับการเลือกรายการเดียวมีการเพิ่มเงื่อนไขการตรวจสอบ คุณสมบัติ MultiSelect และ SelCount
If lstSource.MultiSelect = False Or lstSource.SelCount = 0 Then
If lstSource.ListIndex >= 0 Then
lstSelect.AddItem lstSource.Text
lstSource.RemoveItem lstSource.ListIndex
End If
Else
' คำสั่ง การย้ายหลายรายการ
End If
Sub ButtonStatus เป็นการ Enabled และ Disabled เพื่อเป็นการยอมให้ทำงานตามสถานะที่เหมาะ เช่น ไม่มีรายการใน List box ด้านขวา (lstSelect) ปุ่ม cmdDeSel และ cmdDeSelAll ไม่ควรคลิกได้
ดาวน์โหลดตัวอย่าง (MultiSelectListBox.vbp)
Combo Box
Combo box เป็นตัว control ที่คล้ายกับ List box รวมการกำหนดคุณสมบัติต่าง ๆ ซึ่งวิธีการกำหนดคุณสมบัติของ List box สามารถนำมาใช้กับ Combo box ได้
Combo box มีลักษณะที่ผสมกันระหว่าง List box กับ Text box ทำให้มีคุณสมบัติ แบบ Text box หลายอย่าง เช่น Sel Start, Sel Length และ event เช่น KeyDown, KeyPress รวมถึง Click และ DblClick
ส่วนคุณสมบัติ Style ของ Combo box มี 3 แบบ คือ 0-DropDownCombo, 1-SimpleCombo และ 2-DropDownList ในรูปแบบ DropDown สามารถใช้เพิ่มรายการใน DropDown event
Private Sub cmdNumber_Drop Down ( )
On Error Goto Error_Handler
Dim Item As String
Open "Customer.txt" For Input As #1
Do Until EOF(1)
Line Input #1, Item
cmdNumber.AddItem Item
Loop
Close #1
Exit Sub
Error_Handler:
MsgBox "ไม่สามารถโหลดข้อมูลเข้าสู่ Combo box data"
End Sub
|