ขอความกรุณาจาก อาจารย์ทุกท่าน ด้วยครับ
กระทู้เก่าบอร์ด อ.Yeadram

 2,568   12
URL.หัวข้อ / URL
ขอความกรุณาจาก อาจารย์ทุกท่าน ด้วยครับ

ขอความกรุณาจาก อาจารย์ทุกท่าน ด้วยครับ

-ผมสร้างฟอร์มไวัฟอร์มหนึ่ง เป็นฟอร์มแบบต่อเนื่อง
-สมมติชื่อฟอร์มว่า PAYDATA
-ในฟอร์มกมี TEXT อยู่ 2 อัน สมมติชื่อTEXT ว่า TEXT1 และ TEXT2
โดย TEXT1 เป็นค่าคงที่ ที่รับค่ามาจากตาราง เช่น 12
TEXT2 ตั้งค่าเริ่มต้นให้เท่ากับ 1

*ความต้องการของผม คือ อยากได้คำสั่ง เมื่อกดปุ่มบน keyboard (ปุ่มที่ไม่ได้ใช้งาน )
โดยเมื่อกด 1 ครั้ง ค่าใน TEXT2 จะได้เท่ากับ 12 (1 x 12)
เมื่อกด 2 ครั้ง ค่าใน TEXT2 จะได้เท่ากับ 24 (2 x 12)
เมื่อกด 3 ครั้ง ค่าใน TEXT2 จะได้เท่ากับ 36 (3 x 12)
เมื่อกด N ครั้ง ค่าใน TEXT2 จะได้เท่ากับ N x 12
ขอรบกวนอาจารย์ด้วยนะครับ

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

1 @R13873
ก่อนจะกดปุ่มใดๆ ต้องให้ เคอร์เซอร์มันอยู่ใน text2 ด้วย (หรือทีอื่นก็ได้แต่ก็ต้องไปฝังโค้ด keyup หรือ keydown ในจุดนั้นๆ แทน)
เพื่อจะได้โค้ดคำสั่งมันง่าย

ถ้าเคอร์เซอร์ไปอยู่ที่อื่นๆ คำสั่งก็ไม่ให้มีผล

Sub text2_keyup(keycode .......)
Static keyTime as long
if keycode = เอารหัสแอสกี ของปุ่มที่ต้องการใส่ให้มันตรงนี้ then
keytime = keytime +1
me.text2 = clng(text1) * keytime
end if
end sub
2 @R13881
ขอบพระคุณอาจารย์มากครับ
รบกวนอาจารย์อธิบาย event keyup และ keydown ด้วยครับ ยังไม่เข้าใจ
3 @R13886
ในส่วน Popertie จะมี Tab Event เมื่อเราคลิ๊ก Tab นี้ จะมี Event
Onclick Afterupdate keyup และ keydown ครับ
4 @R13887
ทำได้แล้วครับ
โดยผมใช้ระหัส ascii 88 คือตัว X
คำสั่งที่ได้คือ
Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
Static keyTime As Long
If KeyCode = 88 Then
keyTime = keyTime + 1
Me.Text2 = CLng(Text1) * keyTime
End If
ต้องขอขอบคุณ อาจารย์ yeadram และ อาจารย์ Un มากๆนะครับ
5 @R13892
รบกวนอาจาร์ยอีกครั้งครับ
เมื่อนำคำสั่งไปใช้แล้ว เกิดปัญหาดังนี้ครับ
เนื่องจากเป็นฟอร์มแบบต่อเนื่อง(continuous form)
ใน record ที่ 1 ค่าที่เก็บในตัวแปร keyTime ที่เกิดจากการกดปุ่ม X (สมมุติกดไป 3 ครั้ง) =3
เมื่อกดปุ่ม X ในrecord ที่ 2 ค่าตัวแปร keyTime จะเริ่มจากค่า 4 ไม่ได้เริ่มจาก 1
ถ้าต้องการให้ ค่าตัวแปร keyTime เริ่มจากค่า 1 ในrecord ที่ 2 จะต้องปรับเปลี่ยนคำสั่งยังไงบ้างครับ
ขอรบกวนอาจาร์ยอีกครั้งครับ
6 @R13893
เมื่อเปิดฟอร์ม ตัวแปรประเภท static จะนับเป็น 0
และจะจำค่านี้ไว้ตลอด จนกว่าจะปิดฟอร์ม หากมีคำสั่งให้มันบวกเพิ่มหรือลด มันก็จะได้ค่านั้นตลอดไปจนกว่าจะปิดฟอร์ม เช่นกัน

นั่นเป็นข้อจำกัด

ดังนั้นต้องคิดหาวิธีใหม่ (คิดได้บ้าง แต่ว่ารู้สึกมันยังไม่คลอบคลุมในทุกๆ กรณี จึงยังไม่กล้าออกความเห็นเพิ่ม) รอท่านอื่นมาช่วยต่อยอด หรือตัวท่านเอง นำไปต่อยอดดัดแปลงเอาครับ
7 @R13895
ขอบคุณอาจารย์ yeadram มากครับ
8 @R13896
คงต้องอธิบายให้ชัดเจนก่อนว่า กฎในการกำหนดค่าที่ว่าเป็นอย่างไร จึงจะออกแบบที่ถูกต้องให้ได้นะครับ
เช่น
- บวกเพิ่มอย่างเดียว
- หรือสามารถล้างค่าได้
- จำค่าประจำ record ไว้ เมื่อเปิดใหม่ก็ต้องเป็นค่าต่อเนื่อง
- ฯลฯ
9 @R13902
ลองใช้คำสั่ง End ดูนะครับ ไม่รับรองแต่ลองดู จะสร้างเป็นปุ่มไว้ Reset ค่าตัวแปรแบบ Static หรือไว้ที่ Got Focus ของ Text2 ก็ได้ ดังนี้

Private Sub Text2_GotFocus()
    End
End Sub

ลองดูจะครับ แนะนำให้ก๊อปปี้ไฟล์สำรองไว้ก่อนก็ดี เพราะผมเคยเจอใน Access Runtime มันเห็นคำสั่งนี้เป็นการปิดโปรแกรมเฉยเลย เลยให้ลองดูก่อนนะครับ
10 @R13903
หรือ
Option Compare Database
Dim keyTime As Long
'----------------------------
Private Sub Text2_GotFocus()
    keyTime = 0
End Sub

Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
    'Static keyTime As Long
    If KeyCode = 88 Then
        keyTime = keyTime + 1
        Me.Text2 = CLng(Text1) * keyTime
    End If
End Sub
11 @R13907
ทำได้แล้วครับ ขอบพระคุณอาจาร์ย TTT มากเลยครับ
และอาจาร์ยท่านอื่นๆด้วยครับ
12 @R13908
ครับ ยินดีด้วยครับ
จริงๆมีวิธีคิดอีกแบบ ใช้การบวกอย่างเดียว โดยไม่ต้องใช้ตัวแปร และค่าเก่าที่ค้างใน Text2 ก็ไม่ต้อง Reset ผมแนะนำไปต่อยอดดูนะครับ

Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = 88 Then
        If IsNull(Text2) Then
            Text2 = Text1
            Text2.SelStart = 0
        Else
            Text2 = Text2 + Text1
            Text2.SelStart = 0
        End If
    End If
End Sub
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2647s