กระทู้เก่าบอร์ด อ.Yeadram
        
           1,671   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.0736s
    
      
		
รออยู่นะครับ