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

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

[VB6] การนำ ComboBox Control ไปใส่ไว้ในตารางกริด MSFlexGrid แบบ Run Time

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583


การทำงานกับบริษัทฯข้ามชาติ เขาค่อนข้างที่จะเข้มงวดมากกับเรื่องซอฟท์แวร์ลิขสิทธิ์ เวลาพัฒนาโปรแกรมต่างๆที่ใช้งานในหน่วยงานขององค์กร จึงต้องใช้ทรัพยากรระบบที่มีอยู่อย่างเต็มที่ จะไปคาดหวังขอจัดซื้อจัดหาคอมโพเนนท์สุดหรูดูเริ่ดมาใช้งาน มันไม่ใช่เรื่องง่ายๆเลย หากพาวเวอร์แรงเจอร์ไม่เพียงพอ 5555+ ... นี่แหละคือที่มาของบทความในเรื่องนี้ครับผม ...

ตาราง MSFlexGrid เป็น Component ที่ติดมากับ Visual Basic 6 มีความเร็วในการอ่านข้อมูลได้ดี แต่มันมีคุณสมบัติเป็นแบบ Read Only คือแสดงผลข้อมูลได้อย่างเดียว ไม่สามารถคีย์ข้อมูลอะไรเข้าไปได้ แล้วเราจะนำเอา ComboBox เข้าไปใส่ไว้ในแต่ละเซลล์ที่เราต้องการได้อย่างไร???
หลักการคิด แบบเรียงลำดับขั้นตอนก็ไม่ได้ยุ่งยาก ...
- เมื่อเปิดฟอร์มขึ้นมา ต้องซ่อน ComboBox มันเอาไว้ก่อน (Visible = False)
- เมื่อเมาส์เคลื่อนไปจิ้มเลือกในเซลล์ที่เราต้องการ เราก็ย้าย ComboBox มันเคลื่อนที่ไปทับเซลล์นั้นๆ และเปิดให้มันแสดงผล (Visible = True)
- เมื่อผู้ใช้งานเลือก Item ที่มีอยู่ใน ComboBox เราก็ทำการคัดลอกข้อมูลนั้นไปเก็บเอาไว้ในเซลล์ที่ ComboBox มันทับเอาไว้
- เมื่อเกิดการเคลื่อนที่ออกจากเซลล์ไปโฟกัสยัง Control ตัวอื่นๆ เราก็ปิดการแสดงผลของ ComboBox (Visible = False) ก็เป็นอันจบพิธี
  1. ' / -----------------------------------------------------------------------------------------------
  2. Private Sub Form_Load()
  3.     '// Center form @Run time
  4.     Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
  5.     '// Initialize MSFlexGrid Control
  6.     Call SetupGrid
  7.     '
  8.     With Combo1
  9.         .ZOrder (0)
  10.         '// Load the ComboBox's list.
  11.         .AddItem "M100"
  12.         .AddItem "M150"
  13.         .AddItem "M16"
  14.         '// Adjust column width
  15.         .Width = fg.ColWidth(2)
  16.         .ListIndex = 0
  17.         '// Hidden Control
  18.         .Visible = False
  19.     End With
  20. End Sub
คัดลอกไปที่คลิปบอร์ด
เมื่อเริ่มต้นการทำงาน

  1. ' / -----------------------------------------------------------------------------------------------
  2. ' / Initialize FlexGrid
  3. Private Sub SetupGrid()
  4. ' / -----------------------------------------------------------------------------------------------
  5.     With fg
  6.         .Clear
  7.         .Cols = 3
  8.         .TextMatrix(0, 0) = "Column 1"
  9.         .TextMatrix(0, 1) = "Column 2"
  10.         .TextMatrix(0, 2) = "Combo Box"
  11.         '//
  12.         .ColWidth(0) = 1200
  13.         .ColWidth(1) = 2600
  14.         .ColWidth(2) = Combo1.Width
  15.         '
  16.         .RowHeightMin = Combo1.Height
  17.     End With
  18.     '// เพิ่มรายการข้อมูลทดสอบเข้าไปใน MSFlexGrid
  19.     With fg
  20.         .AddItem "1" & vbTab & "Product 1" & vbTab & "M16"
  21.         .AddItem "2" & vbTab & "Product 2" & vbTab & "M150"
  22.         .AddItem "3" & vbTab & "Product 3" & vbTab & "M100"
  23.         .AddItem "4" & vbTab & "Product 4" & vbTab & "M16"
  24.     End With
  25. End Sub
คัดลอกไปที่คลิปบอร์ด
เริ่มต้นค่า (Initialize) ให้กับ MSFlexGrid และใส่ข้อมูลตัวอย่าง

  1. ' / -----------------------------------------------------------------------------------------------
  2. ' / เกิดเหตุการณ์นำเมาส์ไปคลิ๊กที่ Cell ใดๆใน MSFlexGrid
  3. Private Sub fg_Click()
  4. ' / -----------------------------------------------------------------------------------------------
  5.     If fg.Row = 0 Then Exit Sub
  6.     '// เลือกหลักที่ต้องการ
  7.     Select Case fg.Col
  8.         '// ไม่ใช่หลักที่ต้องการให้ ComboBox ปรากฏ ก็ปิดการแสดงผลของ ComboBox
  9.         Case 0 To 1:
  10.             Combo1.Visible = False
  11.             
  12.         '// หลักที่ 3 (Index = 2) คือหลักที่ต้องการ และทำการเคลื่อนย้ายตำแหน่ง ComboBox เข้าสู่ FlexGrid ได้
  13.         Case 2:
  14.             Combo1.Visible = True   '// เปิดการแสดงผล ComboBox
  15.             Combo1.Text = fg.Text   '// นำค่าจาก FlexGrid มาเทียบค่าใน ComboBox
  16.             '// เคลื่อนย้ายตำแหน่ง ComboxBox ไปในเซลล์ต่างๆของหลักที่ 3
  17.             '// Move ซ้าย, บน, กว้าง, สูง
  18.             Combo1.Move fg.CellLeft + fg.Left, fg.CellTop + fg.Top, fg.CellWidth
  19.     End Select
  20. End Sub
คัดลอกไปที่คลิปบอร์ด
เหตุการณ์นำเมาส์ไปคลิ๊กที่ Cell ใดๆใน MSFlexGrid โดยให้สังเกตหลักที่ 3 (โดยมี Index = 2 เพราะเรานับค่าเริ่มต้นจาก 0) ตรงนี้นี่เองที่เรานำเอา ComboBox เคลื่อนที่ไปปิดทับเซลล์นั้นๆ

  1. ' / -----------------------------------------------------------------------------------------------
  2. Private Sub Combo1_Click()
  3. ' / -----------------------------------------------------------------------------------------------
  4.     '// กรณีโฟกัสหลัก 3 (Index = 2) หากเกิดการเปลี่ยนค่าในการเลือก ComboBox ก็นำค่านั้นไปใส่ไว้ในเซลล์ของ MSFlexGrid
  5.     If fg.Col = 2 Then fg.Text = Combo1.Text
  6. End Sub
คัดลอกไปที่คลิปบอร์ด
เมื่อคลิ๊กเลือกไอเทม ก็ทำการคัดลอก (Copy) ค่าในไอเทมไปใส่ไว้ในเซลล์ที่ถูกเลือก


Project --> Components ...

มาดูโค้ดฉบับเต็ม
  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: Adding ComboBox control into DataGridView @Runtime.
  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. ' / -----------------------------------------------------------------------------------------------
  16. Private Sub Form_Load()
  17.     '// Center form @Run time
  18.     Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
  19.     '// Initialize MSFlexGrid Control
  20.     Call SetupGrid
  21.     '
  22.     With Combo1
  23.         .ZOrder (0)
  24.         '// Load the ComboBox's list.
  25.         .AddItem "M100"
  26.         .AddItem "M150"
  27.         .AddItem "M16"
  28.         '// Adjust column width
  29.         .Width = fg.ColWidth(2)
  30.         .ListIndex = 0
  31.         '// Hidden Control
  32.         .Visible = False
  33.     End With
  34. End Sub

  35. ' / -----------------------------------------------------------------------------------------------
  36. ' / Initialize FlexGrid
  37. Private Sub SetupGrid()
  38. ' / -----------------------------------------------------------------------------------------------
  39.     With fg
  40.         .Clear
  41.         .Cols = 3
  42.         .TextMatrix(0, 0) = "Column 1"
  43.         .TextMatrix(0, 1) = "Column 2"
  44.         .TextMatrix(0, 2) = "Combo Box"
  45.         '//
  46.         .ColWidth(0) = 1200
  47.         .ColWidth(1) = 2600
  48.         .ColWidth(2) = Combo1.Width
  49.         '
  50.         .RowHeightMin = Combo1.Height
  51.     End With
  52.     '// เพิ่มรายการข้อมูลทดสอบเข้าไปใน MSFlexGrid
  53.     With fg
  54.         .AddItem "1" & vbTab & "Product 1" & vbTab & "M16"
  55.         .AddItem "2" & vbTab & "Product 2" & vbTab & "M150"
  56.         .AddItem "3" & vbTab & "Product 3" & vbTab & "M100"
  57.         .AddItem "4" & vbTab & "Product 4" & vbTab & "M16"
  58.     End With
  59. End Sub

  60. ' / -----------------------------------------------------------------------------------------------
  61. ' / เกิดเหตุการณ์นำเมาส์ไปคลิ๊กที่ Cell ใดๆใน MSFlexGrid
  62. Private Sub fg_Click()
  63. ' / -----------------------------------------------------------------------------------------------
  64.     If fg.Row = 0 Then Exit Sub
  65.     '// เลือกหลักที่ต้องการ
  66.     Select Case fg.Col
  67.         '// ไม่ใช่หลักที่ต้องการให้ ComboBox ปรากฏ ก็ปิดการแสดงผลของ ComboBox
  68.         Case 0 To 1:
  69.             Combo1.Visible = False
  70.             
  71.         '// หลักที่ 3 (Index = 2) คือหลักที่ต้องการ และทำการเคลื่อนย้ายตำแหน่ง ComboBox เข้าสู่ FlexGrid ได้
  72.         Case 2:
  73.             Combo1.Visible = True   '// เปิดการแสดงผล ComboBox
  74.             Combo1.Text = fg.Text   '// นำค่าจาก FlexGrid มาเทียบค่าใน ComboBox
  75.             '// เคลื่อนย้ายตำแหน่ง ComboxBox ไปในเซลล์ต่างๆของหลักที่ 3
  76.             '// Move ซ้าย, บน, กว้าง, สูง
  77.             Combo1.Move fg.CellLeft + fg.Left, fg.CellTop + fg.Top, fg.CellWidth
  78.     End Select
  79. End Sub

  80. ' / -----------------------------------------------------------------------------------------------
  81. Private Sub Combo1_Click()
  82. ' / -----------------------------------------------------------------------------------------------
  83.     '// กรณีโฟกัสหลัก 3 (Index = 2) หากเกิดการเปลี่ยนค่าในการเลือก ComboBox ก็นำค่านั้นไปใส่ไว้ในเซลล์ของ MSFlexGrid
  84.     If fg.Col = 2 Then fg.Text = Combo1.Text
  85. End Sub
คัดลอกไปที่คลิปบอร์ด
Conclusion: จะเห็นได้เลยว่าวิธีการขั้นตอนต่างๆนั้น มันไม่ได้มีอะไรที่ยุ่งยากซับซ้อนเลย นอกจากจะนำไปใช้งานจริงได้แล้ว ยังเป็นการฝึกคิดแก้ปัญหา นั่นก็หมายความว่ายิ่งได้รับประสบการณ์มากขึ้นจากการพัฒนาตนเอง ...
ดาวน์โหลดโค้ดต้นฉบับ VB6 ได้ที่นี่

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

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

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

GMT+7, 2024-11-27 23:59 , Processed in 0.108227 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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