www.pc3enter.tk
پنج شنبه 01 آبان 1399, 16:15 عصر
سلام عزیزان دیدم بعضی از دوستان هم مشکل دارن در نحوه استفاده از DoEvents و هم نمیدونند این چیه.
ببینید DoEvents این تابع رو وقتی دارین توی برنامتون از یك حلقه تكرار كه ممكنه تموم شدنش طول بكشه استفاده میكنین توی حلقه فراخوانی كنین.حالا چكار میكنه؟
بطور عادی وقتی دارین توی یه حلقه تكرار(یا هر كدی!!) یكسری محاسبات رو انجام میدین تا زمانی كه حلقه تموم نشه برنامتون در مقابل Message هایی كه بش ارسال میشه عكس العملی انجام نمیده و همه عكس العمل ها رو بعد از تموم شدن حلقه انجام میده و یا اگه شما توی حلقه یه كدمربوط به چاپ كردن یه رشته روی فرم رو نوشته باشین عمل چاپ شدن رو بعد از تمام شدن حلقه مشاهده میكنین.به قولی تا زمان پایان حلقه برنامه هیچ Event ی انجام نمیده(البته این مساله 100 در 100 هم نیست).تابع DoEvents این كار رو براتون میكنه.این دو كد رو تست كنین :
فقط یک لیست باکس به برنامه اضافه کنید.
Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
Loop
End Sub
Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
DoEvents
Loop
End Sub
وقتی دكمه رو توی كد اول فشار میدین تا زمانی كه حلقه تموم نشده نمیتونین اعضای اضافه شده رو توی لیست باكس ببینین یا فرم رو حركت بدین.در صورتی كه در كد دوم این طور نیست.
ببینید DoEvents این تابع رو وقتی دارین توی برنامتون از یك حلقه تكرار كه ممكنه تموم شدنش طول بكشه استفاده میكنین توی حلقه فراخوانی كنین.حالا چكار میكنه؟
بطور عادی وقتی دارین توی یه حلقه تكرار(یا هر كدی!!) یكسری محاسبات رو انجام میدین تا زمانی كه حلقه تموم نشه برنامتون در مقابل Message هایی كه بش ارسال میشه عكس العملی انجام نمیده و همه عكس العمل ها رو بعد از تموم شدن حلقه انجام میده و یا اگه شما توی حلقه یه كدمربوط به چاپ كردن یه رشته روی فرم رو نوشته باشین عمل چاپ شدن رو بعد از تمام شدن حلقه مشاهده میكنین.به قولی تا زمان پایان حلقه برنامه هیچ Event ی انجام نمیده(البته این مساله 100 در 100 هم نیست).تابع DoEvents این كار رو براتون میكنه.این دو كد رو تست كنین :
فقط یک لیست باکس به برنامه اضافه کنید.
Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
Loop
End Sub
Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
DoEvents
Loop
End Sub
وقتی دكمه رو توی كد اول فشار میدین تا زمانی كه حلقه تموم نشده نمیتونین اعضای اضافه شده رو توی لیست باكس ببینین یا فرم رو حركت بدین.در صورتی كه در كد دوم این طور نیست.