เรื่องการเปิด back-forward form
กระทู้เก่าบอร์ด อ.Yeadram

 1,327   4
URL.หัวข้อ / URL
เรื่องการเปิด back-forward form

สวัสดีครับอาจารย์
ขอรบครับผม

ใน Access สามารถทำได้เหมือน กับ Internet Explorer หรือเปล่าครับ
คือเปิดฟอร์มขึ้นมา ก็จะมีปุ่ม back---forward
ถ้ามีฟอร์มที่เปิดแล้วปุ่ม back ก็จะแสดงสถานะให้ย้อนกลับได้
ถ้าไม่มีฟอร์มที่เปิดก่อนหน้านนี้แล้วก็จะแสดงสถานะไม่ทำงาน
ปุ่ม forward ก็เหมือนกันครับผม

เรียนด้วยความเคารพครับ

4 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R09983
-ฟอร์มทุกฟอร์มที่ต้องการให้มีระบบนี้ ต้องมี Caption เป็นของตัวเอง
-ฟอร์มทุกฟอร์มที่ต้องการให้มีระบบนี้ ต้องมีปุ่มคำสั่งที่เหมือนกัน ทั้งชื่อและโค้ดในเหตุการณ์ อย่างน้อยสองปุ่มคือ cmdBack และ cmdForward
ปุ่ม cmdBack ให้เขียนในพร้อพเพอร์ตี้ เหตุการณ์ onClick ว่า =GoBack()
ปุ่ม cmdForward ให้เขียนว่า =GoForward()
-ฟอร์มทุกฟอร์มที่ต้องการให้มีระบบนี้ ให้เขียนโค้ดหรือ เพิ่มโค้ด หรือ แทรกโค้ด เข้าไปในเหตุการณ์ onCurrent ดังนี้
fnBckFwd Me.Name, Me.Caption
Me.cmdBack.Enabled = blBack
Me.cmdBack.ControlTipText = stBack
Me.cmdForward.Enabled = blForward
Me.cmdForward.ControlTipText = stForward


-สุดท้าย ให้สร้างโมดูลมาใหม่ 1อัน เอาโค้ดทั้งหมดนี่ ไปวาง
(โปรดสำรวจอีกครั้งให้แน่ใจว่า ชื่อตัวแปรในโค้ดนี้ ชื่อฟังก์ชั่นในโค้ดนี้ ไม่ได้ซ้ำกับชื่อใดๆ ในโปรเจคคุณ)

Option Compare Database
   Public BckFwd() As String
   Public blBack As Integer
   Public blForward As Integer
   Public stBack As String
   Public stForward As String

Public Function Goback()
    For i = UBound(BckFwd, 2) - 1 To 0 Step -1
        If stBack = BckFwd(1, i) Then
            DoCmd.OpenForm BckFwd(0, i)
            DoCmd.Close acForm, BckFwd(0, i + 1), acSaveYes
            Exit For
        End If
    Next
End Function

Public Function GoForward()
    For i = 1 To UBound(BckFwd, 2)
        If stForward = BckFwd(1, i) Then
            DoCmd.OpenForm BckFwd(0, i)
            DoCmd.Close acForm, BckFwd(0, i - 1), acSaveYes
            Exit For
        End If
    Next
End Function

Public Function fnBckFwd(frmName As String, frmDescription As String)
Dim x, y, z As Integer
    If IsEmpty(blBack) Then
        blBack = False
        stBack = ""
    End If
    If IsEmpty(blForward) Then
        blForward = False
        stForward = ""
    End If
    
On Error Resume Next
x = UBound(BckFwd, 2)
    If Err.Number = 9 Then
        Err.Clear
        x = 0
        ReDim BckFwd(1, 0)
        BckFwd(0, 0) = frmName
        BckFwd(1, 0) = frmDescription
        Exit Function
    End If
On Error GoTo 0

y = 0
    For z = 0 To x
        If BckFwd(0, z) = frmName Then
            y = 1
            Exit For
        End If
    Next
If y = 0 Then
    ReDim Preserve BckFwd(1, x + 1)
    BckFwd(0, x + 1) = frmName
    BckFwd(1, x + 1) = frmDescription
    blBack = True
    stBack = BckFwd(1, x)
    blForward = False
Else

    If z > 0 Then
        blBack = True
        stBack = BckFwd(1, z - 1)
    Else
        blBack = False
    End If
    
    If z < x Then
        blForward = True
        stForward = BckFwd(1, z + 1)
    Else
        blForward = False
    End If
    
End If
End Function


2 @R09984
- คุณจะเห็นว่าปุ่มคำสั่ง มันเริ่มใช้งานได้ ก็ต่อเมื่อมีการเปิดฟอร์ม ที่สอง เป็นต้นไป (ในแต่ละครั้งที่เปิดโปรแกรม)
- คุณอาจต้องไปปรับแต่งเพิ่มเติม เพื่อให้เข้ากับงานของคุณ หรือเพื่อให้เหมาะสมกับความต้องการ
- โค้ดทั้งหมดใช้เวลาเขียน ทดสอบ แก้ไข แก้บัก อยู่ประมาณ 2 วัน (ในเวลาว่าง) พร้อมทั้งไล่ฆ่า Spam post ไปในเวลาเดียวกัน   ทั้งมันส์ ทั้งเหนื่อย อิอิ

ขอให้สนุกกับการประยุกต์ใช้นะครับ
3 @R10046
ขอบพระคุณเป็นอย่างมากครับอาจารย์
ทุ่มเทมาเลยครับน่าถือจริงๆครับ
ผมจะนำไปใช้ให้เกิดประโยชน์ให้มากที่สุดครับผม
และพยามจะเผยแพร่ความรู้ให้คนอื่นแบบไม่ปิดบังเลยครับ
เพื่อเป็นวิทยาทานครับ
4 @R10047
เรียนอาจารย์ครับ
ผมส่งตัวอย่างให้ดูแล้วนะครับ
accboard@gmail.com
ครับผม
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3394s