กระทู้เก่าบอร์ด อ.Yeadram
2,013 6
URL.หัวข้อ /
URL
ขอทราบวิธี ทำให้ปุ่มกด เป็นสีเทา?างๆตามเงื่อนไขค่ะ
ขอเรียนถามอาจารย์ดังนี้นะคะ
หนูทำปุ่มกดที่หน้าฟอร์ม ไว้สองปุ่มคือ
1.) ปุ่ม "ก่อนหน้า" ไว้สำหรับ คลิก เพื่อย้อนกลับไปเร็คคอร์ดก่อนหน้า
2.) ปุ่ม "ถัดไป" ไว้สำหรับ คลิก เพื่อไปยังเร็คคอร์ดถัดไป
ทั้งสองปุ่มก็ทำงานได้ปกติดีค่ะ แต่สิ่งที่หนูต้องการก็คือ จะทำอย่างไร เมื่อย้อนกลับไปถึงเร็คคอร์ดแรกสุดแล้ว ให้ป้ายข้อความบนปุ่ม "ก่อนหน้า" กลายเป็นสีเทาจางๆ และไม่สามารถคลิกได้
และเช่นเดียวกันคือ เมื่อเลื่อนไปข้างหน้าจนถึง New Record แล้ว ก้ให้ป้ายข้อความบนปุ่ม "ถัดไป" กลายเป็นสีเทาจางๆ และไม่สามารถคลิกได้
ขอความช่วยเหลือจากอาจารย์ด้วยนะคะ
หนูทำปุ่มกดที่หน้าฟอร์ม ไว้สองปุ่มคือ
1.) ปุ่ม "ก่อนหน้า" ไว้สำหรับ คลิก เพื่อย้อนกลับไปเร็คคอร์ดก่อนหน้า
2.) ปุ่ม "ถัดไป" ไว้สำหรับ คลิก เพื่อไปยังเร็คคอร์ดถัดไป
ทั้งสองปุ่มก็ทำงานได้ปกติดีค่ะ แต่สิ่งที่หนูต้องการก็คือ จะทำอย่างไร เมื่อย้อนกลับไปถึงเร็คคอร์ดแรกสุดแล้ว ให้ป้ายข้อความบนปุ่ม "ก่อนหน้า" กลายเป็นสีเทาจางๆ และไม่สามารถคลิกได้
และเช่นเดียวกันคือ เมื่อเลื่อนไปข้างหน้าจนถึง New Record แล้ว ก้ให้ป้ายข้อความบนปุ่ม "ถัดไป" กลายเป็นสีเทาจางๆ และไม่สามารถคลิกได้
ขอความช่วยเหลือจากอาจารย์ด้วยนะคะ
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R05479
ปัญหานี้เป็นตัวอย่างที่ดีอันนึงที่จะบอกว่า การเลือก event ที่เหมาะสม จะช่วยให้การเขียนโค้ดทำได้ง่ายขึ้น นี่เป็นปัจจัยสำคัญปัจจัยหนึ่งของการใช้ Access หรือ Develpment Tools ใดๆก็ตามที่เป็น Event Driven Programming
กรณีนี้ เรามี OnCurrent event ของฟอร์ม ซึ่งจะทำงานทุกครั้งที่เรคอร์ดปัจจุบันถูกเปลี่ยนแปลงไป ดังนั้นเราใช้ event นี้จะเหมาะที่สุด เพราะตรวจสอบที่จุดที่เกิดการเปลี่ยนแปลงโดยตรงเลย ถ้าไปเช็คที่ Command-Next/Pre เราจะแน่ใจหรือว่า เราเช็คได้ครบทุกจุดที่จะทำให้เรคอร์ดเปลี่ยนแล้ว ผู้ใช้อาจกด PageUp, PageDown หรือกดปุ่ม Tab เพื่อเลื่อนไปยังเรคอร์ดอื่นๆก็เป็นไปได้
โค้ดเป็นดังนี้
ปล. ถ้าหน้าจอสามารถให้ผู้ใช้ป้อนเรคอร์ดใหม่ได้ (AllowAddition Property เป็น True/Yes) โค้ดนี้ต้องปรับปรุงอีกนะครับ
กรณีนี้ เรามี OnCurrent event ของฟอร์ม ซึ่งจะทำงานทุกครั้งที่เรคอร์ดปัจจุบันถูกเปลี่ยนแปลงไป ดังนั้นเราใช้ event นี้จะเหมาะที่สุด เพราะตรวจสอบที่จุดที่เกิดการเปลี่ยนแปลงโดยตรงเลย ถ้าไปเช็คที่ Command-Next/Pre เราจะแน่ใจหรือว่า เราเช็คได้ครบทุกจุดที่จะทำให้เรคอร์ดเปลี่ยนแล้ว ผู้ใช้อาจกด PageUp, PageDown หรือกดปุ่ม Tab เพื่อเลื่อนไปยังเรคอร์ดอื่นๆก็เป็นไปได้
โค้ดเป็นดังนี้
Private Sub Form_Current()
Dim RS As DAO.Recordset
If Not Me.Command_Pre.Enabled Then Me.Command_Pre.Enabled = True
If Not Me.Command_Next.Enabled Then Me.Command_Next.Enabled = True
Set RS = Me.RecordsetClone
If RS.RecordCount > 0 Then
RS.Bookmark = Me.Bookmark
RS.MovePrevious
If RS.BOF And Me.Command_Pre.Enabled Then Me.Command_Pre.Enabled = False
RS.Bookmark = Me.Bookmark
RS.MoveNext
If RS.EOF And Me.Command_Next.Enabled Then Me.Command_Next.Enabled = False
End If
RS.Close: Set RS = Nothing
End Sub
ปล. ถ้าหน้าจอสามารถให้ผู้ใช้ป้อนเรคอร์ดใหม่ได้ (AllowAddition Property เป็น True/Yes) โค้ดนี้ต้องปรับปรุงอีกนะครับ
3 @R05480
ขอบพระคุณอย่างยิ่งค่ะอาจารย์
ที่ท่าน ปล. นั้นใช่เลยค่ะ ผู้สามารถป้อนข้อมูลเรคอร์ดใหม่ได้ด้วย
แล้วจะต้องปรับปรุงโค้ดนี้ตรงไหนบ้าง และ โค้ดเดิมหนูต้องเอาออกหรือเปล่าคะ
ขอคำแนะนำด้วยค่ะอาจารย์
ที่ท่าน ปล. นั้นใช่เลยค่ะ ผู้สามารถป้อนข้อมูลเรคอร์ดใหม่ได้ด้วย
แล้วจะต้องปรับปรุงโค้ดนี้ตรงไหนบ้าง และ โค้ดเดิมหนูต้องเอาออกหรือเปล่าคะ
ขอคำแนะนำด้วยค่ะอาจารย์
4 @R05481
ให้แนวทางลองเอาไปคิดนะครับ เพราะเงื่อนไขจะเพิ่มเติมอีกเยอะเลย
- ถ้าอยู่ที่เรคอร์ดสุดท้ายแล้ว จะออกแบบให้ปุ่ม Next ใช้งานได้หรือไม่
- เมื่ออยู่ที่เรคอร์ดใหม่ สามารถกดปุ่ม Pre ได้หรือไม่
- เมื่อไปที?เรคอร์ดใหม่ Current event ก็ยังเกิดอยู่ดี แต่ค่าของ .Bookmark จะยังไม่มี ถ้าเรียกใช้โค้ดเดิม ก็จะ runtime error ที่จุดนั้นแหล่ะ เพื่อป้องกัน คุณสามารถใช้ Me.NewRecord เพื่อเช็คได้ว่าเป็นเรคอร์ดใหม่หรือไม่
ผมคิดว่าที่ผมบอกไปนี้ จะยังไม่ครอบคลุมทุกจุดของเงือนไขที่มีผลต่อสถานะของปุ่ม Next และ Pre แต่ยังคิดไม่ออก เดี๋ยวพอคุณทำไปก็อาจจะเจอ แล้วก็ต้องปรับปรุงโปรแกรมต่อไป
อีกคำถามที่อยากให้ลองคิดคือ คุ้มที่จะทำต่อไปหรือไม่ เพราะ Access เองมันก็มีปุ่มเหล่านี้ให้ใช้อยู่แล้วที่ Navigation Button ทำไมต้องมานั่งทำเองให้ซ้ำซ้อนยุ่งยาก ?!?
- ถ้าอยู่ที่เรคอร์ดสุดท้ายแล้ว จะออกแบบให้ปุ่ม Next ใช้งานได้หรือไม่
- เมื่ออยู่ที่เรคอร์ดใหม่ สามารถกดปุ่ม Pre ได้หรือไม่
- เมื่อไปที?เรคอร์ดใหม่ Current event ก็ยังเกิดอยู่ดี แต่ค่าของ .Bookmark จะยังไม่มี ถ้าเรียกใช้โค้ดเดิม ก็จะ runtime error ที่จุดนั้นแหล่ะ เพื่อป้องกัน คุณสามารถใช้ Me.NewRecord เพื่อเช็คได้ว่าเป็นเรคอร์ดใหม่หรือไม่
ผมคิดว่าที่ผมบอกไปนี้ จะยังไม่ครอบคลุมทุกจุดของเงือนไขที่มีผลต่อสถานะของปุ่ม Next และ Pre แต่ยังคิดไม่ออก เดี๋ยวพอคุณทำไปก็อาจจะเจอ แล้วก็ต้องปรับปรุงโปรแกรมต่อไป
อีกคำถามที่อยากให้ลองคิดคือ คุ้มที่จะทำต่อไปหรือไม่ เพราะ Access เองมันก็มีปุ่มเหล่านี้ให้ใช้อยู่แล้วที่ Navigation Button ทำไมต้องมานั่งทำเองให้ซ้ำซ้อนยุ่งยาก ?!?
5 @R05482
ขอบคุณค่ะอาจารย์
หนูทบทวนดูคำแนะนำของท่านแ้ล้ว ก็เห็นด้วยกับท่านว่า แล้วมันจะคุ้มค่าไหม
หนูดูโค้ดตามที่ท่านได้กรุณาให้มาแล้วบวกกับคำแนะนำ หนูคงต้องล้มเลิกความคิดเพราะกลัวว่าจะได้ไม่คุ้มเสียซะแล้ว
ตอนที่คิดครั้งแรกคืออยากทำให้ฟอร์มมันดูเก๋ ก็เลยเอา Navigation Button ของ Access ออก แล้วก็ทำ Navigation เอง แต่พอมาถึงตอนนี้...คงต้องเลิกความคิดนี้แล้วค่ะ
ขอขอบคุณอาจารย์อีกครั้งนะคะ ที่กรุณาเสียเวลาสร้างโค้ดให้ค่ะ
หนูจะเก็บโค้ดนี้ไว้เพื่อประโยชน์ในการศึกษาต่อไปค่ะ
หนูทบทวนดูคำแนะนำของท่านแ้ล้ว ก็เห็นด้วยกับท่านว่า แล้วมันจะคุ้มค่าไหม
หนูดูโค้ดตามที่ท่านได้กรุณาให้มาแล้วบวกกับคำแนะนำ หนูคงต้องล้มเลิกความคิดเพราะกลัวว่าจะได้ไม่คุ้มเสียซะแล้ว
ตอนที่คิดครั้งแรกคืออยากทำให้ฟอร์มมันดูเก๋ ก็เลยเอา Navigation Button ของ Access ออก แล้วก็ทำ Navigation เอง แต่พอมาถึงตอนนี้...คงต้องเลิกความคิดนี้แล้วค่ะ
ขอขอบคุณอาจารย์อีกครั้งนะคะ ที่กรุณาเสียเวลาสร้างโค้ดให้ค่ะ
หนูจะเก็บโค้ดนี้ไว้เพื่อประโยชน์ในการศึกษาต่อไปค่ะ
6 @R05483
ผมคิดว่า เราควรจะใช้ความสามารถของฟังก์ชั่นต่างๆที่ Access มีให้มาแล้วอย่างคุ้มค่า เพื่อให้การพัฒนาโปรแกรมเป็นไปได้อย่างรวดเร็ว เช่น การค้นหาข้อมูล , การเรียงลำดับข้อมูล , การกรองข้อมูล , การพิมพ์ , การดู Print Preview เหล่านี้ผมใช้เมนูที่ Access มีมาให้แล้วทำงานแทนครับ
ผมว่า ปุ่ม Navigation Button เก๋ระดับนึงแล้ว
ผมว่า ปุ่ม Navigation Button เก๋ระดับนึงแล้ว
Time: 0.3501s
ปัจจุบันหนูใช้ MsgBox แจ้งเตือนอยู่ค่ะ แต่ที่ต้องการคือ จะไม่ใช้ MsgBox โดยอยากทำให้ ปุ่มกด เปลี่ยนเป็นสีเทาและไม่มีผลในการกด แทนค่ะ(เลียนแบบตัวเลือกระเบียนของ Access)
โค้ดเดิมที่หนูทำไว้ดังนี้ค่ะ
Private Sub Command-Next_Click()
On Error GoTo Err_Command-Next_Click
DoCmd.GoToRecord , , acNext
Exit_Command-Next_Click:
Exit Sub
Err_Command-Next_Click:
MsgBox Err.Description
Resume Exit_Command-Next_Click
End Sub
==============================
Private Sub Command-Pre_Click()
On Error GoTo Err_Command-Pre_Click
DoCmd.GoToRecord , , acPrevious
Exit_Command-Pre_Click:
Exit Sub
Err_Command-Pre_Click:
MsgBox Err.Description
Resume Exit_Command-Pre_Click
End Sub
=============================
อาจารย์ช่วยดูโค้ดให้หน่อยนะคะ ว่าจะต้องแก้ไขส่วนไหน จึงจะไ้ดผลตามที่ต้องการค่ะ