thongkorn โพสต์ 2018-8-2 13:48:00

[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 ได้ที่นี่ ...




MrDen โพสต์ 2018-8-3 09:20:51

ขอบคุณครับผม:)
หน้า: [1]
ดูในรูปแบบกติ: [VB6] การนำ DateTimePicker มาใส่ไว้ในตารางกริด MS FlexGrid แบบ Run Time