|
การทำงานกับบริษัทฯข้ามชาติ เขาค่อนข้างที่จะเข้มงวดมากกับเรื่องซอฟท์แวร์ลิขสิทธิ์ เวลาพัฒนาโปรแกรมต่างๆที่ใช้งานในหน่วยงานขององค์กร จึงต้องใช้ทรัพยากรระบบที่มีอยู่อย่างเต็มที่ จะไปคาดหวังขอจัดซื้อจัดหาคอมโพเนนท์สุดหรูดูเริ่ดมาใช้งาน มันไม่ใช่เรื่องง่ายๆเลย หากพาวเวอร์แรงเจอร์ไม่เพียงพอ 5555+ ... นี่แหละคือที่มาของบทความในเรื่องนี้ครับผม ...
ตาราง MSFlexGrid เป็น Component ที่ติดมากับ Visual Basic 6 มีความเร็วในการอ่านข้อมูลได้ดี แต่มันมีคุณสมบัติเป็นแบบ Read Only คือแสดงผลข้อมูลได้อย่างเดียว ไม่สามารถคีย์ข้อมูลอะไรเข้าไปได้ แล้วเราจะนำเอา ComboBox เข้าไปใส่ไว้ในแต่ละเซลล์ที่เราต้องการได้อย่างไร???
หลักการคิด แบบเรียงลำดับขั้นตอนก็ไม่ได้ยุ่งยาก ...
- เมื่อเปิดฟอร์มขึ้นมา ต้องซ่อน ComboBox มันเอาไว้ก่อน (Visible = False)
- เมื่อเมาส์เคลื่อนไปจิ้มเลือกในเซลล์ที่เราต้องการ เราก็ย้าย ComboBox มันเคลื่อนที่ไปทับเซลล์นั้นๆ และเปิดให้มันแสดงผล (Visible = True)
- เมื่อผู้ใช้งานเลือก Item ที่มีอยู่ใน ComboBox เราก็ทำการคัดลอกข้อมูลนั้นไปเก็บเอาไว้ในเซลล์ที่ ComboBox มันทับเอาไว้
- เมื่อเกิดการเคลื่อนที่ออกจากเซลล์ไปโฟกัสยัง Control ตัวอื่นๆ เราก็ปิดการแสดงผลของ ComboBox (Visible = False) ก็เป็นอันจบพิธี- ' / -----------------------------------------------------------------------------------------------
- Private Sub Form_Load()
- '// Center form @Run time
- Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
- '// Initialize MSFlexGrid Control
- Call SetupGrid
- '
- With Combo1
- .ZOrder (0)
- '// Load the ComboBox's list.
- .AddItem "M100"
- .AddItem "M150"
- .AddItem "M16"
- '// Adjust column width
- .Width = fg.ColWidth(2)
- .ListIndex = 0
- '// Hidden Control
- .Visible = False
- End With
- End Sub
คัดลอกไปที่คลิปบอร์ด เมื่อเริ่มต้นการทำงาน
- ' / -----------------------------------------------------------------------------------------------
- ' / Initialize FlexGrid
- Private Sub SetupGrid()
- ' / -----------------------------------------------------------------------------------------------
- With fg
- .Clear
- .Cols = 3
- .TextMatrix(0, 0) = "Column 1"
- .TextMatrix(0, 1) = "Column 2"
- .TextMatrix(0, 2) = "Combo Box"
- '//
- .ColWidth(0) = 1200
- .ColWidth(1) = 2600
- .ColWidth(2) = Combo1.Width
- '
- .RowHeightMin = Combo1.Height
- End With
- '// เพิ่มรายการข้อมูลทดสอบเข้าไปใน MSFlexGrid
- With fg
- .AddItem "1" & vbTab & "Product 1" & vbTab & "M16"
- .AddItem "2" & vbTab & "Product 2" & vbTab & "M150"
- .AddItem "3" & vbTab & "Product 3" & vbTab & "M100"
- .AddItem "4" & vbTab & "Product 4" & vbTab & "M16"
- End With
- End Sub
คัดลอกไปที่คลิปบอร์ด เริ่มต้นค่า (Initialize) ให้กับ MSFlexGrid และใส่ข้อมูลตัวอย่าง
- ' / -----------------------------------------------------------------------------------------------
- ' / เกิดเหตุการณ์นำเมาส์ไปคลิ๊กที่ Cell ใดๆใน MSFlexGrid
- Private Sub fg_Click()
- ' / -----------------------------------------------------------------------------------------------
- If fg.Row = 0 Then Exit Sub
- '// เลือกหลักที่ต้องการ
- Select Case fg.Col
- '// ไม่ใช่หลักที่ต้องการให้ ComboBox ปรากฏ ก็ปิดการแสดงผลของ ComboBox
- Case 0 To 1:
- Combo1.Visible = False
-
- '// หลักที่ 3 (Index = 2) คือหลักที่ต้องการ และทำการเคลื่อนย้ายตำแหน่ง ComboBox เข้าสู่ FlexGrid ได้
- Case 2:
- Combo1.Visible = True '// เปิดการแสดงผล ComboBox
- Combo1.Text = fg.Text '// นำค่าจาก FlexGrid มาเทียบค่าใน ComboBox
- '// เคลื่อนย้ายตำแหน่ง ComboxBox ไปในเซลล์ต่างๆของหลักที่ 3
- '// Move ซ้าย, บน, กว้าง, สูง
- Combo1.Move fg.CellLeft + fg.Left, fg.CellTop + fg.Top, fg.CellWidth
- End Select
- End Sub
คัดลอกไปที่คลิปบอร์ด เหตุการณ์นำเมาส์ไปคลิ๊กที่ Cell ใดๆใน MSFlexGrid โดยให้สังเกตหลักที่ 3 (โดยมี Index = 2 เพราะเรานับค่าเริ่มต้นจาก 0) ตรงนี้นี่เองที่เรานำเอา ComboBox เคลื่อนที่ไปปิดทับเซลล์นั้นๆ
- ' / -----------------------------------------------------------------------------------------------
- Private Sub Combo1_Click()
- ' / -----------------------------------------------------------------------------------------------
- '// กรณีโฟกัสหลัก 3 (Index = 2) หากเกิดการเปลี่ยนค่าในการเลือก ComboBox ก็นำค่านั้นไปใส่ไว้ในเซลล์ของ MSFlexGrid
- If fg.Col = 2 Then fg.Text = Combo1.Text
- End Sub
คัดลอกไปที่คลิปบอร์ด เมื่อคลิ๊กเลือกไอเทม ก็ทำการคัดลอก (Copy) ค่าในไอเทมไปใส่ไว้ในเซลล์ที่ถูกเลือก
Project --> Components ...
มาดูโค้ดฉบับเต็ม
- ' / -----------------------------------------------------------------------------------------------
- ' / 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: Adding ComboBox control into DataGridView @Runtime.
- ' / 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
- ' / -----------------------------------------------------------------------------------------------
- Private Sub Form_Load()
- '// Center form @Run time
- Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
- '// Initialize MSFlexGrid Control
- Call SetupGrid
- '
- With Combo1
- .ZOrder (0)
- '// Load the ComboBox's list.
- .AddItem "M100"
- .AddItem "M150"
- .AddItem "M16"
- '// Adjust column width
- .Width = fg.ColWidth(2)
- .ListIndex = 0
- '// Hidden Control
- .Visible = False
- End With
- End Sub
- ' / -----------------------------------------------------------------------------------------------
- ' / Initialize FlexGrid
- Private Sub SetupGrid()
- ' / -----------------------------------------------------------------------------------------------
- With fg
- .Clear
- .Cols = 3
- .TextMatrix(0, 0) = "Column 1"
- .TextMatrix(0, 1) = "Column 2"
- .TextMatrix(0, 2) = "Combo Box"
- '//
- .ColWidth(0) = 1200
- .ColWidth(1) = 2600
- .ColWidth(2) = Combo1.Width
- '
- .RowHeightMin = Combo1.Height
- End With
- '// เพิ่มรายการข้อมูลทดสอบเข้าไปใน MSFlexGrid
- With fg
- .AddItem "1" & vbTab & "Product 1" & vbTab & "M16"
- .AddItem "2" & vbTab & "Product 2" & vbTab & "M150"
- .AddItem "3" & vbTab & "Product 3" & vbTab & "M100"
- .AddItem "4" & vbTab & "Product 4" & vbTab & "M16"
- End With
- End Sub
- ' / -----------------------------------------------------------------------------------------------
- ' / เกิดเหตุการณ์นำเมาส์ไปคลิ๊กที่ Cell ใดๆใน MSFlexGrid
- Private Sub fg_Click()
- ' / -----------------------------------------------------------------------------------------------
- If fg.Row = 0 Then Exit Sub
- '// เลือกหลักที่ต้องการ
- Select Case fg.Col
- '// ไม่ใช่หลักที่ต้องการให้ ComboBox ปรากฏ ก็ปิดการแสดงผลของ ComboBox
- Case 0 To 1:
- Combo1.Visible = False
-
- '// หลักที่ 3 (Index = 2) คือหลักที่ต้องการ และทำการเคลื่อนย้ายตำแหน่ง ComboBox เข้าสู่ FlexGrid ได้
- Case 2:
- Combo1.Visible = True '// เปิดการแสดงผล ComboBox
- Combo1.Text = fg.Text '// นำค่าจาก FlexGrid มาเทียบค่าใน ComboBox
- '// เคลื่อนย้ายตำแหน่ง ComboxBox ไปในเซลล์ต่างๆของหลักที่ 3
- '// Move ซ้าย, บน, กว้าง, สูง
- Combo1.Move fg.CellLeft + fg.Left, fg.CellTop + fg.Top, fg.CellWidth
- End Select
- End Sub
- ' / -----------------------------------------------------------------------------------------------
- Private Sub Combo1_Click()
- ' / -----------------------------------------------------------------------------------------------
- '// กรณีโฟกัสหลัก 3 (Index = 2) หากเกิดการเปลี่ยนค่าในการเลือก ComboBox ก็นำค่านั้นไปใส่ไว้ในเซลล์ของ MSFlexGrid
- If fg.Col = 2 Then fg.Text = Combo1.Text
- End Sub
คัดลอกไปที่คลิปบอร์ด Conclusion: จะเห็นได้เลยว่าวิธีการขั้นตอนต่างๆนั้น มันไม่ได้มีอะไรที่ยุ่งยากซับซ้อนเลย นอกจากจะนำไปใช้งานจริงได้แล้ว ยังเป็นการฝึกคิดแก้ปัญหา นั่นก็หมายความว่ายิ่งได้รับประสบการณ์มากขึ้นจากการพัฒนาตนเอง ...
ดาวน์โหลดโค้ดต้นฉบับ VB6 ได้ที่นี่
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|