สั่งให้ Form Disable ยังไงครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,523   6
URL.หัวข้อ / URL
สั่งให้ Form Disable ยังไงครับ

ต้องการให้ Form แสดงอยู่ แต่ไม่สามารถกดอะไรได้เหมือนกับเราสั่งแบบนี่นะครับ

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

1 @R07172
หรือใช้ API ช่วยได้ไหมครับ
รออยู่นะครับ
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 มาเปรียบเทียบกันได้อีกด้วย ฯลฯ

(ห??ังว่าคงไม่งงนะครับ)
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 ก็ได้ครับ
5 @R07179
ลืมไปว่า อย่าลืมสั่งให้ปลดล็อคฟอร์ม A ด้วย โดยสั่ง Forms("FormA").UnlockForm และต้องป้องกันไม่ให้ฟอร์ม A ถูกคลิก minimize, maximize, close ด้วย
6 @R07180
สุดยอดครับ ขอบคุณมากเลยครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3569s