กระทู้เก่าบอร์ด อ.Yeadram
1,520 6
URL.หัวข้อ /
URL
สั่งให้ Form Disable ยังไงครับ
ต้องการให้ Form แสดงอยู่ แต่ไม่สามารถกดอะไรได้เหมือนกับเราสั่งแบบนี่นะครับ
me.enabled = False
หรือ
forms(1).enabled = False
เป็นต้น
แต่ไม่ใช่สั่งให้ ซ่อน form นะครับ หรือสั่งให้ ทุก control ใน form เป็น enable = False ก็ไม่ใช่นะครับ
me.enabled = False
หรือ
forms(1).enabled = False
เป็นต้น
แต่ไม่ใช่สั่งให้ ซ่อน form นะครับ หรือสั่งให้ ทุก control ใน form เป็น enable = False ก็ไม่ใช่นะครับ
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R07173
ุไม่สามารถกดอะไรได้ มันหมายความว่าอย่างไร หรือหมายถึง แม้จะยัง Enabled อยู่ พอคลิกไปก็ไม่ยอมรับโฟกัสอย่างนั้นหรือ ลองเล่าความต้องการเพิ่มเติมมาหน่อยสิครับว่าทำไมถึงต้องการอย่างนั้น จะเอาไปทำอะไร
3 @R07177
ระหว่างที่ผมกำลังเปิด FormA อยู่นั้น ผมต้องการเรียก FormB ขึ้นมาโดยระหว่างที่ FormB กำลังทำงานอยู่นั้นผมจะต้องไม่สามารถกดที่FormA ได้เลยจนกว่าจะปิด FormB (คล้ายๆกับ Modal=True และ Popup=True) แต่ต่างกันตรงที่ ระหว่างที่ผมกำลังใช้ FormB อยู่ผมสามารถเปิด FormC หรือ Form อื่นๆ ได้ด้วย (แต่ไม่ใช่เป็นการเรียกแบบ Model=True และ Popup=Trueนะครับ) ยกเว้น FormA อย่างเดียวที่ยังไม่สามารถกดปุ่มใดๆได้ทั้งสิ้นจนกว่าจะปิด FormB
หรืออีกตัวอย่างหนึ่ง ก็ประมาณว่าผมเปิด FormA อยู่ในระหว่างนั้นถ้าผมเปิด FormA_Option ผมก็จะไม่สามารถทำอะไร FormA ได้จนกว่าผมจะกำหนด Optionของ FormA เสร็จ แต่ในระหว่างนั้นผมสามารถเปิด FormB ขึ้นมาเพื่อนำ Option ของ FormB มาเปรียบเทียบกันได้อีกด้วย ฯลฯ
(ห??ังว่าคงไม่งงนะครับ)
หรืออีกตัวอย่างหนึ่ง ก็ประมาณว่าผมเปิด FormA อยู่ในระหว่างนั้นถ้าผมเปิด FormA_Option ผมก็จะไม่สามารถทำอะไร FormA ได้จนกว่าผมจะกำหนด Optionของ FormA เสร็จ แต่ในระหว่างนั้นผมสามารถเปิด FormB ขึ้นมาเพื่อนำ Option ของ FormB มาเปรียบเทียบกันได้อีกด้วย ฯลฯ
(ห??ังว่าคงไม่งงนะครับ)
4 @R07178
หลักการคือเมื่อฟอร์ม A ได้รับโฟกัส ถ้ามันพบว่ามันถูกสั่งให้ล็อคฟอร์มเอาไว้ มันก็จะไม่รับโฟกัส แล้วนำโฟกัสไปไว้ที่ฟอร์มที่กำหนดไว้
ในฟอร์ม A ให้ใส่โค้ดว่า
Dim mdLastFormName As String ' เป็นตัวแปรในระดับโมดูล
Public Sub LockForm(strLastFormName As String)
' ทำหน้าที่เป็น method ของฟอร์มที่จะถูกเรียกเมื่อต้องการล็อคฟอร์ม A
mdstrLastFormName = strLastFormName
End Sub
Public Sub UnlockForm()
' ทำหน้าที่เป็น method ของฟอร์มที่จะถูกเรียกเมื่อต้องการปลดล็อคฟอร์ม A
mdLastFormName = ""
End Sub
Private Sub Form_Activate()
' ถ้าตัวแปร wLastFormName มีค่า แสดงว่ามีฟอร์มอื่นสั่งให้ฟอร์ม A ถูกล็อค ก็จะไม่รับโฟกัส โดยสั่งกลับไปให้ฟอร์มที่กำหนดได้รับโฟกัสแทน
If wLastFormName <> "" Then Forms(wLastFormName).SetFocus
End Sub
ที่นี้ในฟอร์ม B ก็ต้องสั่งล็อคฟอร์ม A หรือฟอร์ม A จะล็อคตัวเองก็ได้ โดยสั่ง Forms("FormA").LockForm "ชื่อฟอร์มที่ต้องการให้รับโฟกัสแทนฟอร์ม A" และปลดล็อคโดยการสั่ง Forms("FormA").UnlockForm
หรือถ้ามีฟอร์ม B, C, D, ... จะฟอร์มไหนก็แล้วแต่ แต่ถ้าเป็นฟอร์มปัจจุบัน แล้วไปคลิกฟอร์ม A แล้วต้องการให้กลับมาที่ฟอร์มนี้เสมอ ก็ให้กำหนดใน On Activate event procedure ในฟอร์ม B, C, D, ... ว่า Forms("FormA").LockForm Me.Name ก็ได้ครับ
ในฟอร์ม A ให้ใส่โค้ดว่า
Dim mdLastFormName As String ' เป็นตัวแปรในระดับโมดูล
Public Sub LockForm(strLastFormName As String)
' ทำหน้าที่เป็น method ของฟอร์มที่จะถูกเรียกเมื่อต้องการล็อคฟอร์ม A
mdstrLastFormName = strLastFormName
End Sub
Public Sub UnlockForm()
' ทำหน้าที่เป็น method ของฟอร์มที่จะถูกเรียกเมื่อต้องการปลดล็อคฟอร์ม A
mdLastFormName = ""
End Sub
Private Sub Form_Activate()
' ถ้าตัวแปร wLastFormName มีค่า แสดงว่ามีฟอร์มอื่นสั่งให้ฟอร์ม A ถูกล็อค ก็จะไม่รับโฟกัส โดยสั่งกลับไปให้ฟอร์มที่กำหนดได้รับโฟกัสแทน
If wLastFormName <> "" Then Forms(wLastFormName).SetFocus
End Sub
ที่นี้ในฟอร์ม B ก็ต้องสั่งล็อคฟอร์ม A หรือฟอร์ม A จะล็อคตัวเองก็ได้ โดยสั่ง Forms("FormA").LockForm "ชื่อฟอร์มที่ต้องการให้รับโฟกัสแทนฟอร์ม A" และปลดล็อคโดยการสั่ง Forms("FormA").UnlockForm
หรือถ้ามีฟอร์ม B, C, D, ... จะฟอร์มไหนก็แล้วแต่ แต่ถ้าเป็นฟอร์มปัจจุบัน แล้วไปคลิกฟอร์ม A แล้วต้องการให้กลับมาที่ฟอร์มนี้เสมอ ก็ให้กำหนดใน On Activate event procedure ในฟอร์ม B, C, D, ... ว่า Forms("FormA").LockForm Me.Name ก็ได้ครับ
5 @R07179
ลืมไปว่า อย่าลืมสั่งให้ปลดล็อคฟอร์ม A ด้วย โดยสั่ง Forms("FormA").UnlockForm และต้องป้องกันไม่ให้ฟอร์ม A ถูกคลิก minimize, maximize, close ด้วย
6 @R07180
สุดยอดครับ ขอบคุณมากเลยครับ
Time: 0.2110s
รออยู่นะครับ