กระทู้เก่าบอร์ด อ.Yeadram
4,603 15
URL.หัวข้อ /
URL
ต้องการให้ Lock เฉพาะบาง Record
ผมสร้าง Form ขึ้นมาด้วย AutoForm : Tabular ลักษณะของ Form คือจะคล้าย ๆ Excel และผมจะมีฟิลด์อยู่หนึ่งฟิลด์เป็น Checkbox
สมมุติว่าผมมีข้อมูลอยู่ 10 Record ความต้องการคือ เมื่อผู้ใช้มีการคลิ๊กที่ Checkbox เป็นเครื่องหมายถูกเมื่อไร Record นั้นจะ Enable ไปทั้ง Record
นั้นหมายความว่าใน 10 Record นั้นจะเหลือที่สามารถให้ทำการติ๊กถูกได้อีกแค่ 9 Record เท่านั้น
แต่พอผมใส่คำสั่งตามตัวอย่างด้านล่าง มัน Enable ทั้ง 10 Record เลยครับ ไม่ทราบว่าผมต้องเขียนคำสั่งหรือตั้งค่าอย่างไรครับขอบคุณครับ
If Recive_Check.Value = True Then
textbox1.Enabled = False
textbox2.Enabled = False
textbox3.Enabled = False
textbox4.Enabled = False
textbox5.Setfocus
Recive_Check.Enabled = False
endif
สมมุติว่าผมมีข้อมูลอยู่ 10 Record ความต้องการคือ เมื่อผู้ใช้มีการคลิ๊กที่ Checkbox เป็นเครื่องหมายถูกเมื่อไร Record นั้นจะ Enable ไปทั้ง Record
นั้นหมายความว่าใน 10 Record นั้นจะเหลือที่สามารถให้ทำการติ๊กถูกได้อีกแค่ 9 Record เท่านั้น
แต่พอผมใส่คำสั่งตามตัวอย่างด้านล่าง มัน Enable ทั้ง 10 Record เลยครับ ไม่ทราบว่าผมต้องเขียนคำสั่งหรือตั้งค่าอย่างไรครับขอบคุณครับ
If Recive_Check.Value = True Then
textbox1.Enabled = False
textbox2.Enabled = False
textbox3.Enabled = False
textbox4.Enabled = False
textbox5.Setfocus
Recive_Check.Enabled = False
endif
15 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R14819
ลองวาง code ใน event On Current ดูครับ
2 @R14820
ผมลองดูแล้วครับ ผลออกมาเหมือนกันครับ ตอนแรกเข้าใจว่า On Current ที่ CheckBox ก็ไปหาดูแต่ไม่เจอ
ก็เลยคิดว่าน่าจะเป็นที่ Form ที่ก็ได้ผลเหมือนเดิม ขอบคุณ คุณ PichaiTC มากครับที่กรุณาช่วยมาตอบ ตอนนี้ผมก็พยายามหาวิธีอยู่ครับ
ก็เลยคิดว่าน่าจะเป็นที่ Form ที่ก็ได้ผลเหมือนเดิม ขอบคุณ คุณ PichaiTC มากครับที่กรุณาช่วยมาตอบ ตอนนี้ผมก็พยายามหาวิธีอยู่ครับ
3 @R14822
ดูคร่าวๆ เป็นเพราะคุณไม่ได้เขียนแก้กลับหรือเปล่าครับ เช่น
If Recive_Check.Value = True Then
textbox1.Enabled = False
textbox2.Enabled = False
textbox3.Enabled = False
textbox4.Enabled = False
textbox5.SetFocus
Recive_Check.Enabled = False
Else
textbox1.Enabled = True
textbox2.Enabled = True
textbox3.Enabled = True
textbox4.Enabled = True
textbox5.SetFocus
Recive_Check.Enabled = True
End If
ไว้ทั้งที่ On Current ของฟอร์ม และใน After Update ของ Recive_Check ครับ
If Recive_Check.Value = True Then
textbox1.Enabled = False
textbox2.Enabled = False
textbox3.Enabled = False
textbox4.Enabled = False
textbox5.SetFocus
Recive_Check.Enabled = False
Else
textbox1.Enabled = True
textbox2.Enabled = True
textbox3.Enabled = True
textbox4.Enabled = True
textbox5.SetFocus
Recive_Check.Enabled = True
End If
ไว้ทั้งที่ On Current ของฟอร์ม และใน After Update ของ Recive_Check ครับ
4 @R14823
ขอบคุณ คุณ TTT ครับ จากที่ทดสอบแล้วผลออกมาเหมือนเดิมครับ กด 1 Record Lock ทั้ง 10 เลยครับ
งมอยู่ตั้งแต่เช้ายังนึกไม่ออกเลย
งมอยู่ตั้งแต่เช้ายังนึกไม่ออกเลย
5 @R14824
อย่างนี้ครับ คือจริงๆ มันน่าจะได้นะครับ แต่คุณต้องกดไปยังเรคคอร์ดที่ Recive_Check ยังไม่ได้ทำเครื่องหมายถูก ฟิลด์ทั้งหมดก็จะกลายเป็น Enable และหากคุณกดไปยังเรคคอร์ดที่ Recive_Check ทำเครื่องหมายถูกไว้ ฟิลด์ทั้งหมดก็จะเป็น Disable อย่างนั้นใช่ไหมครับ
นั่นเป็นธรรมชาติของฟอร์มครับ มันจะทำตามเรคคอร์ดที่เลือกเหมือนกันทุกเรคคอร์ด
นั่นเป็นธรรมชาติของฟอร์มครับ มันจะทำตามเรคคอร์ดที่เลือกเหมือนกันทุกเรคคอร์ด
6 @R14825
แต่หากความต้องการของคุณคือ อยากให้เห็นถึงมาแตกต่างระหว่างเรคคอร์ดที่ทำเครื่องหมายที่ Checkbox กับไม่ทำเครื่องหมาย
เท่าที่นึกได้คือการเซ็ท conditional ของแต่ละฟิลด์ให้มีสีต่างกันแทน
ตัวอย่าง
1. เปลี่ยนโค๊ดเดิมเป็น
If Recive_Check.Value = False Then
textbox1.Locked = False
textbox2.Locked = False
textbox3.Locked = False
textbox4.Locked = False
textbox5.SetFocus
Recive_Check.Locked = False
Else
textbox1.Locked = True
textbox2.Locked = True
textbox3.Locked = True
textbox4.Locked = True
textbox5.SetFocus
Recive_Check.Locked = True
End If
ไว้ทั้งที่ On Current ของฟอร์ม และใน After Update ของ Recive_Check เหมือนเดิม
2. ในมุมมองออกแบบฟอร์ม เลือกเมนูหัวข้อ Format > Conditional Formatting
2.1 หน้าต่าง Conditional Formatting Rules Manager กดปุ่ม New Rule ใส่ค่าตามภาพ
ทำทุกคอนโทรลบนฟอร์มที่คุณต้องการ ก็จะได้สีของเรคคอร์ดที่ต่างกันระหว่างทำเครื่องหมายกับไม่ทำเครื่องหมาย
ปล. ที่ต้องเปลี่ยนจากการใช้ Property Enabled เป็น Locked แทน เพราะการใช้ Conditional คอนโทรลจะถูกโปรแกรมแก้ให้ Enabled เป็น True เสมอเมื่อใช้ Conditional ถ้าไม่อยากให้ข้อมูลแก้ไขได้ เลยต้องใช้เป็น Locked แทน
ลองปรับใช้ดูนะครับ
เท่าที่นึกได้คือการเซ็ท conditional ของแต่ละฟิลด์ให้มีสีต่างกันแทน
ตัวอย่าง
1. เปลี่ยนโค๊ดเดิมเป็น
If Recive_Check.Value = False Then
textbox1.Locked = False
textbox2.Locked = False
textbox3.Locked = False
textbox4.Locked = False
textbox5.SetFocus
Recive_Check.Locked = False
Else
textbox1.Locked = True
textbox2.Locked = True
textbox3.Locked = True
textbox4.Locked = True
textbox5.SetFocus
Recive_Check.Locked = True
End If
ไว้ทั้งที่ On Current ของฟอร์ม และใน After Update ของ Recive_Check เหมือนเดิม
2. ในมุมมองออกแบบฟอร์ม เลือกเมนูหัวข้อ Format > Conditional Formatting
2.1 หน้าต่าง Conditional Formatting Rules Manager กดปุ่ม New Rule ใส่ค่าตามภาพ
ทำทุกคอนโทรลบนฟอร์มที่คุณต้องการ ก็จะได้สีของเรคคอร์ดที่ต่างกันระหว่างทำเครื่องหมายกับไม่ทำเครื่องหมาย
ปล. ที่ต้องเปลี่ยนจากการใช้ Property Enabled เป็น Locked แทน เพราะการใช้ Conditional คอนโทรลจะถูกโปรแกรมแก้ให้ Enabled เป็น True เสมอเมื่อใช้ Conditional ถ้าไม่อยากให้ข้อมูลแก้ไขได้ เลยต้องใช้เป็น Locked แทน
ลองปรับใช้ดูนะครับ
7 @R14826
ขอบคุณ คุณTTT อีกครั้งครับ
ฟอร์มผมออกแบบเป็น Tabular คือ หน้าตามันจะคล้าย ๆ Excel ครับ มันจะโชว์ทั้ง 10 Record พอกด CheckBox มันก็ Lock หมดเลย
สิ่งที่ต้องการคือ ต้องการให้ผู้ใช้ทำครั้งเดียวครับ ไม่สามารถทำซ้ำได้ คือ กดปุ่ม Lock ก็จะถามว่ายืนยัน แล้ว Lock เลยห้ามแก้ไข ถ้าจะปลด Lock จะต้องเป็นอีกคนครับ จะได้เป็นเช็คซึ่งกันและกัน
ผมงมอยู่นานคิดไปคิดมาทำหลายวิธี็ก็ไม่ได้สักที เลยเปลี่ยนวิธีทำเป็นลักษณะนี้ครับ
พอกดปุ่ม CheckBox จะมี MsgBox ถามยืนยัน ถ้าตอบ OK Record นี้จะหายไปเลยครับ แต่จะไปเก็บไว้อีก Table หนึ่งครับ ซึ่ง Tbl นี้จะ Lock ทั้งหมดที่มีการยืนยันแล้วครับ
ขอบคุณ คุณTTT อีกครั้งครับ
ฟอร์มผมออกแบบเป็น Tabular คือ หน้าตามันจะคล้าย ๆ Excel ครับ มันจะโชว์ทั้ง 10 Record พอกด CheckBox มันก็ Lock หมดเลย
สิ่งที่ต้องการคือ ต้องการให้ผู้ใช้ทำครั้งเดียวครับ ไม่สามารถทำซ้ำได้ คือ กดปุ่ม Lock ก็จะถามว่ายืนยัน แล้ว Lock เลยห้ามแก้ไข ถ้าจะปลด Lock จะต้องเป็นอีกคนครับ จะได้เป็นเช็คซึ่งกันและกัน
ผมงมอยู่นานคิดไปคิดมาทำหลายวิธี็ก็ไม่ได้สักที เลยเปลี่ยนวิธีทำเป็นลักษณะนี้ครับ
พอกดปุ่ม CheckBox จะมี MsgBox ถามยืนยัน ถ้าตอบ OK Record นี้จะหายไปเลยครับ แต่จะไปเก็บไว้อีก Table หนึ่งครับ ซึ่ง Tbl นี้จะ Lock ทั้งหมดที่มีการยืนยันแล้วครับ
ขอบคุณ คุณTTT อีกครั้งครับ
8 @R14827
แต่ก็ยังอยาก ได้วิธีการ Lock เฉพาะบาง Record อยู่ครับ ตอนนี้ก็ยังพยายาหาวิธีอยู่เหมือนกันครับ
9 @R14828
คือผมก็ไม่รู้ว่าปัญหาอยู่ตรงไหน แต่จากตัวอย่างที่ผมให้ไปน่าจะทำอย่างที่คุณ Akung ต้องการได้นะครับ เอางี้แล้วกันผมทำเป็นไฟล์ตัวอย่างจากวิธีที่ผมเขียนไว้ข้างต้นให้คุณไปเปรียบเทียบดูแล้วกันนะครับ
โหลดที่นี่ครับ
http://cloudbox.3bb.co.th/share3/NjE3NnxmYzFmMDczZmU5MTQwM2YwMGQyMjE5MTg1ZmRlYTc5YnwzNTMwOA==
โหลดที่นี่ครับ
http://cloudbox.3bb.co.th/share3/NjE3NnxmYzFmMDczZmU5MTQwM2YwMGQyMjE5MTg1ZmRlYTc5YnwzNTMwOA==
10 @R14829
โอ้วขอบคุณมากเลยครับคุณ TTT ที่อุตสาทำตัวอย่างมาให้ แต่คำสั่งก็เหมือนกันหมดเลยนะครับ ยกเว้นผมเห็นตรงค่า Format ที่คุณเปลี่ยนจาก Yes/No เป็น True/False เดี่ยวยังไง ผมจะลองทดสอบกับตัวโปรแกรมผมดูครับ
แต่ผมสงสัยอย่างครับ ผมไม่เห็นคำสั่ง Enable เลย แต่ทำไมเวลา CheckBox เป็น True โปรแกรมกับ Enable ได้ครับ รบกวนขอความรู้อีกครั้งครับขอบคุณมากครับ
แต่ผมสงสัยอย่างครับ ผมไม่เห็นคำสั่ง Enable เลย แต่ทำไมเวลา CheckBox เป็น True โปรแกรมกับ Enable ได้ครับ รบกวนขอความรู้อีกครั้งครับขอบคุณมากครับ
11 @R14830
ไม่ใช้การเซ็ท Property Enable แล้ว เปลี่ยนเป็น Locked แทนครับ
ลองดูที่ Reply หมายเลข R14825 ทำตามนั้นทุกประการณ์ครับ
ลองดูที่ Reply หมายเลข R14825 ทำตามนั้นทุกประการณ์ครับ
12 @R14831
เข้าใจแล้วครับ มันเป็นเรื่องของ Conditional Format ที่ทำให้เป็นสีแบบนั้น ขอบคุณมากครับ
13 @R14836
รบกวนเพิ่มเติมอีกนิดครับ คือตัวอย่างที่คุณ TTT ทำมาให้ดู มีอยู่ทั้งหมด 8 รายการ
แต่ถ้าบังเอิญผู้ใช้คลิ๊กเพลินไปคลิ๊กช่องด้านล่างสุดมันจะกลายเป็นการ Add เพิ่มทั้งที่รายละเอียดของบุคคลที่ 9 ไม่มีอะไรเลย พอจะมีทาง Lock ได้ไหมครับ
ว่าถ้าให้ทำได้แค่ 8 รายการที่มีรายการอยู่
แต่ถ้าบังเอิญผู้ใช้คลิ๊กเพลินไปคลิ๊กช่องด้านล่างสุดมันจะกลายเป็นการ Add เพิ่มทั้งที่รายละเอียดของบุคคลที่ 9 ไม่มีอะไรเลย พอจะมีทาง Lock ได้ไหมครับ
ว่าถ้าให้ทำได้แค่ 8 รายการที่มีรายการอยู่
14 @R14837
ทำได้แล้วครับ แค่ไปเพิ่มที่ on current ไปอีกเงื่อนไข
if Textbox1 = "" Then
Recive_Check.Locked = True
Else
Recive_Check.Locked = False
Endif
ขออภัยที่ถามเองตอบเองครับ
if Textbox1 = "" Then
Recive_Check.Locked = True
Else
Recive_Check.Locked = False
Endif
ขออภัยที่ถามเองตอบเองครับ
15 @R14846
ผมเคยเจอปัญหายังงี้เวลาทำ CHECKBOX เป็น unbound ครับ วิธีแก้ผ้าเอาหน้ารอดของผมคือต้องมี tableที่เก็บค่า CHECKBOX จริงๆถึงจะไม่วิ่งรวดเดียว 10 RECORDS
Time: 0.3821s