กระทู้เก่าบอร์ด อ.Yeadram
2,604 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
ขอรบกวนอาจารย์ด้วยนะครับ
-ผมสร้างฟอร์มไวัฟอร์มหนึ่ง เป็นฟอร์มแบบต่อเนื่อง
-สมมติชื่อฟอร์มว่า 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
2 @R13881
ขอบพระคุณอาจารย์มากครับ
รบกวนอาจารย์อธิบาย event keyup และ keydown ด้วยครับ ยังไม่เข้าใจ
รบกวนอาจารย์อธิบาย event keyup และ keydown ด้วยครับ ยังไม่เข้าใจ
3 @R13886
ในส่วน Popertie จะมี Tab Event เมื่อเราคลิ๊ก Tab นี้ จะมี Event
Onclick Afterupdate keyup และ keydown ครับ
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 มากๆนะครับ
โดยผมใช้ระหัส 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 จะต้องปรับเปลี่ยนคำสั่งยังไงบ้างครับ
ขอรบกวนอาจาร์ยอีกครั้งครับ
เมื่อนำคำสั่งไปใช้แล้ว เกิดปัญหาดังนี้ครับ
เนื่องจากเป็นฟอร์มแบบต่อเนื่อง(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 ไว้ เมื่อเปิดใหม่ก็ต้องเป็นค่าต่อเนื่อง
- ฯลฯ
เช่น
- บวกเพิ่มอย่างเดียว
- หรือสามารถล้างค่าได้
- จำค่าประจำ record ไว้ เมื่อเปิดใหม่ก็ต้องเป็นค่าต่อเนื่อง
- ฯลฯ
9 @R13902
ลองใช้คำสั่ง End ดูนะครับ ไม่รับรองแต่ลองดู จะสร้างเป็นปุ่มไว้ Reset ค่าตัวแปรแบบ Static หรือไว้ที่ Got Focus ของ Text2 ก็ได้ ดังนี้
Private Sub Text2_GotFocus()
End
End Sub
ลองดูจะครับ แนะนำให้ก๊อปปี้ไฟล์สำรองไว้ก่อนก็ดี เพราะผมเคยเจอใน Access Runtime มันเห็นคำสั่งนี้เป็นการปิดโปรแกรมเฉยเลย เลยให้ลองดูก่อนนะครับ
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
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 ผมแนะนำไปต่อยอดดูนะครับ
จริงๆมีวิธีคิดอีกแบบ ใช้การบวกอย่างเดียว โดยไม่ต้องใช้ตัวแปร และค่าเก่าที่ค้างใน 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
Time: 0.2624s
เพื่อจะได้โค้ดคำสั่งมันง่าย
ถ้าเคอร์เซอร์ไปอยู่ที่อื่นๆ คำสั่งก็ไม่ให้มีผล
Sub text2_keyup(keycode .......)
Static keyTime as long
if keycode = เอารหัสแอสกี ของปุ่มที่ต้องการใส่ให้มันตรงนี้ then
keytime = keytime +1
me.text2 = clng(text1) * keytime
end if
end sub