[VB6] การนำ DateTimePicker มาใส่ไว้ในตารางกริด MS FlexGrid แบบ Run Time
http://www.g2gnet.com/webboard/images/vb6/DataGridDT.pngแอดมินไม่ขอพูดมาก เจ็บคอ 5555+ ... เพราะเนื่องจากได้แจกโค้ดและอธิบายวิธีการคิดในเรื่องนี้ไปไว้ใน VB.NET เป็นที่เรียบร้อย อ่านรายละเอียดได้จาก การนำ DateTimePicker และ Button Control ไปใส่ไว้ในตารางกริด DataGridView แบบ Run Time ... แท้จริงแล้วแอดมินเขียนด้วย VB6 มาก่อน แล้วก็นำเอาหลักการนี้ไปใช้ใน VB.NET แต่พึ่งเอาโค้ดมาลงให้กับมิตรรักแฟนคลับสาย VB6 ครับผม ... สรุปให้ฟังเล็กน้อยล่ะกัน หากมีการโฟกัสไปยังเซลล์ (ยึดตามหลัก) ที่เราต้องการ ให้เปิดการแสดงผล DTPicker แล้วเอา DTPicker ไปวางทับในเซลล์นั้นๆ นำค่าจากเซลล์มาใส่ไว้ใน DTPicker หากมีการเปลี่ยนแปลงค่าใน DTPicker จะต้องนำค่านี้ไปใส่ไว้ในเซลล์ด้วย หากหลุดโฟกัสออกจากเซลล์ ให้ปิดการแสดงผล DTPicker ... จบ
http://www.g2gnet.com/webboard/images/vb6/DataGridDTDesign.png
หน้าจอในการออกแบบ
http://www.g2gnet.com/webboard/images/vb6/DataGridDTRun.png
หน้าจอเมื่อสั่งรันโปรแกรม ... ก็ต้องมีการปรับระยะของการแสดงผลของ DTPicker ให้ตรงกับความกว้างของเซลล์ด้วย
มาดูโค้ดฉบับเต็ม ...
' / -----------------------------------------------------------------------------------------------
' / 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 only)
' / Facebook: https://www.facebook.com/commonindy (Worldwide)
' / Purpose: Adding the DTPicker into MS FlexGrid Control.
' / 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_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF2
Call fg_Click
End Select
End Sub
Private Sub Form_Load()
'// ปิดการแสดงผล DTPicker
Me.DTPicker1.Visible = False
'// ตั้งค่าตารางกริด
Call SetupGrid
Randomize
'// Sample Data
With fg
.AddItem "1" & vbTab & "1111" & vbTab & "เหล้าเร้ด" & vbTab & Format(DateAdd("d", Date, -Rnd * 365), "dd/mm/yyyy")
.AddItem "2" & vbTab & "2222" & vbTab & "เหล้าว็อดก้า" & vbTab & Format(DateAdd("d", Date, -Rnd * 365), "dd/mm/yyyy")
.AddItem "3" & vbTab & "3333" & vbTab & "เหล้าขาว" & vbTab & Format(DateAdd("d", Date, -Rnd * 365), "dd/mm/yyyy")
End With
End Sub
'/ ตั้งค่าต่างๆของ FlexGrid แบบ Run Time
Sub SetupGrid()
With fg
'/ สั่ง Clear FlexGrid
.Clear
.FixedCols = 0
.Rows = 1
.Cols = 4
.TextMatrix(0, 0) = "Primary Key"
.TextMatrix(0, 1) = "รหัสสินค้า"
.TextMatrix(0, 2) = "ชื่อสินค้า"
.TextMatrix(0, 3) = "วันที่ซื้อ"
.ColWidth(0) = .Width \ 4 - 400
.ColWidth(1) = .Width \ 4 - 600
.ColWidth(2) = .Width \ 4 + 800
.ColWidth(3) = .Width \ 4 - 100
'//
.RowHeightMin = DTPicker1.Height
End With
End Sub
' / -----------------------------------------------------------------------------------------------
' / เกิดเหตุการณ์นำเมาส์ไปคลิ๊กที่ Cell ใดๆใน FlexGrid
Private Sub fg_Click()
' / -----------------------------------------------------------------------------------------------
If fg.Row = 0 Then Exit Sub
'/ เลือกหลักที่ต้องการ
Select Case fg.Col
'/ ไม่ใชหลักที่ต้องการให้ DTPickerปรากฏ ก็ปิดการแสดงผลของ DTPicker
Case 0 To 2:
DTPicker1.Visible = False
'/ หลัก 3 คือหลักที่ต้องการ และทำการเคลื่อนย้ายตำแหน่ง DTPickerเข้าสู่ FlexGrid ได้
Case 3:
DTPicker1.Visible = True ' เปิดการแสดงผล DTPicker
DTPicker1.Value = fg.Text ' นำค่าจาก FlexGrid มาเทียบค่าใน DTPicker
'/ เคลื่อนย้ายตำแหน่ง DTPicker ไปในเซลล์ต่างๆของหลักที่ 3 และปรับระยะเท่ากับเซลล์นั้นๆ
DTPicker1.Move fg.CellLeft + fg.Left, fg.CellTop + fg.Top, fg.CellWidth
End Select
End Sub
' / -----------------------------------------------------------------------------------------------------------------------------------
Private Sub DTPicker1_Click()
' / -----------------------------------------------------------------------------------------------------------------------------------
'/ หากอยู่ที่หลัก 3 หากเกิดการเปลี่ยนค่าในการเลือก DTPickerก็นำค่านั้นไปใส่ไว้ในเซลล์ของ FlexGrid
If fg.Col = 3 Then fg.Text = DTPicker1.Value
End Sub
'// Addition: เพิ่มเติมในส่วนของการปรับระยะให้ดูสวยงาม
Private Sub Form_Resize()
On Error Resume Next
Me.fg.Move 15, 15, Me.ScaleWidth - 15, Me.ScaleHeight - 30
With fg
.ColWidth(0) = .Width \ 4 - 400
.ColWidth(1) = .Width \ 4 - 600
.ColWidth(2) = .Width \ 4 + 800
.ColWidth(3) = .Width \ 4 - 100
End With
'/ เคลื่อนย้ายตำแหน่ง DTPicker ไปในเซลล์ต่างๆของหลักที่ 3 และปรับระยะเท่ากับเซลล์นั้นๆ
DTPicker1.Move fg.CellLeft + fg.Left, fg.CellTop + fg.Top, fg.CellWidth
End Sub
ดาวน์โหลดโค้ดฉบับเต็ม VB6 ได้ที่นี่ ...
ขอบคุณครับผม:)
หน้า:
[1]