سلام
فرض کنیم برای یه دکمه کدی مثل کد زیر رو نوشتیم:
کد:
for i = 1 to 1000000
DoEvent
....
....
....
next i
حالا فرض کنیم این روال در حال اجراست و ما می خوایم
با فشردن یک دکمه اجرای اون روال رو کلا متوقف کنیم
چه باید کرد؟؟؟؟؟؟؟؟؟؟؟
.
برای چه کاری احتیاج داری ؟
آخه نسبت به مورد استفادت کارهای مختلفی میشه انجام داد !
کد زیر تنها یک راه حله:
کد:
Sub Command1_Click()
Command1.Tag="Stop"
End Sub
For I=1 to 1000000
IF Command1.Tag="Stop" then Exit For
DoEvents
Next I
سلام!
توقف یک روال یا یک حلقه؟
همون طور که دوستمون گفتند مثلا برای خروج از حلقه For دستور Exit For
این کارو میکنه. شما تو حلقه دستوری مینویسی که هر دفعه که حلقه اجرا میشه فشرده شدن کلید از صفحه کلید رو چک میکنه .رو کدش شرط میزاری که کدوم کلید بود خارج بشه.
اگه میخوای از روال یا Sub خارج بشی دستور Exit Subرو استفاده کن.
جناب Darg لطف میکنید راجع به این خاصیت Tag یه توضیحی بدید؟
ممنون!
Tag= برچسب,منگوله,ضمیمه کردن,اتکیت چسباندن
Tag یک خصوصیت اضافی برای استفاده های مختلف در یک شیئ است
VB خود به Tag اشیاء کاری ندارد و آن را مقدار دهی نمی کند. اما برنامه نویش می تواند در مواردی که احتیاج به اختصاص یک داده مضاعف برای یک شیء دارد از Tag استفاده کند (مانند کد بالا وقتی خواستم فشرده شدن دکمه را گزارش کنم به جای تعریف یک آرایه جدید از Tag خود دکمه استفاده کردم)
خصوصیت Tag از نوع String است و می توانید با کمی خلاقیت بیش از یک داده به آن اختصاص دهید.
کد:
Private Sub Form_Load()
Me.Tag = "500$|20000$|30$|1800$"
Command1.Caption = Split(Me.Tag, "|")(Val(Command1.Tag))
End Sub
Private Sub Command1_Click()
Command1.Tag = Val(Command1.Tag) + 1
If Val(Command1.Tag) > UBound(Split(Me.Tag, "|")) Then Command1.Tag = 0
Command1.Caption = Split(Me.Tag, "|")(Val(Command1.Tag))
End Sub
کد بالا کار می کنه اما بدون تعریف هیچ آرایه ای !
سلام
اگه ما بخوایم یک میلیون بار دستور ایف را اجرا کنیم که خیلی زمان می بره
راهی نداره که دستور توقف روال رو تو همون روال (کامند یک ) نوشت؟
خوب اگر این طوری راضی نیستی راه حل های دیگه ای هم هست.
وقعا راست میگند برنامه نویسی قدرت تفکر رو تقویت میکنه. کد زیر:
کد:
Dim I As Double
Const Max As Double = 10 ^ 10
Private Sub Command1_Click()
I = Max
End Sub
Private Sub Form_Load()
Me.Show
For I = 0 To Max
DoEvents
Next
MsgBox "End For ... Next"
End Sub
همیشه کوتاه ترین راه حل ها بهترین اون ها نیستند