سلام من در برنامه ام چند فرم دارم كه بايد اطلاعات در اونها وارد بشه و كاربر مي تونه همزمان به همه فرمها دسترسي داشته باشه اما زماني كه كاربر مي خواد اطلاعاتي در يكي از فرمها وارد كنه نياز دارم كه فرم قفل بشه در واقع فرم بايد تبديل به فرم Modalبشه و با پايان وارد كردن اطلاعات بايد اين قفل باز بشه يعني دسترسي به ساير فرمها مهيا بشه كسي مي دون چطوري مي شه اين كارو كرد؟
من خودم از كد زير استفاده كردم اما زياد نپسنديدم
Private Sub Form_LostFocus()
Me.SetFocus
End Sub
كسي راه بهتري سراغ داره؟
به اين كار مي گن On top of كه يه API هم داره به گردي پيدا ميشه
شايدم منظورت اين باشه كه فرم رو اينجوري فراخواني كني:
form1.show 1
با زدن عدد يك جلوي متد show باعث ميشه باقي فرم ها قفل بشن و كارهاي كاربر محدود به اون فرم بشه فقط...
منظورت چيز ديگست توضيح بده ...
نبي
دوست من سلام
در زمان اجرا هيچ راهي براي تغيير خاصيت فرم از Modal به Modalless وجود نداره چون اين خاصيت قبل از ايجاد يه فرم ست ميشه توي حافظه . پس بهترين كار اينه كه اول پنجره رو On the Top كني با استفاده از اين تابع API
کد:
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
بعدش با دستور
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, &H1 Or &H2
پنجره مورد نظر رو On the top كني . بعدش از همون تكنيكي كه خود شما هم اشاره كردي استفاده كني . تركيبي از اين دوخاصيت يه حالت قفل به پنجره شما ميده و از اون حالت پرش و ظاهر شدن مجدد فرم شما هم جلوگيري ميكنه .
براي خارج كردن فرم از حالت On the Top از دستور
SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, &H1 Or &H2
استفاده كني . من توي اون برنامه كيبوردي كه گذاشتم از اين تكنيك استفاده كردم .
اميدوارم مشكل شما بر طرف بشه ! :wink: