PDA

View Full Version : unloadكردن فرم



fidnah
شنبه 05 مرداد 1387, 10:56 صبح
سلام د.ستان
يه سوال خيلي ساده :
unload كردن فرم واسه كي استفاده ميشه؟
زماني كه از يه فرم به فرم ديگه ميريم فرم قبلي بايد unloadبشه؟؟؟؟؟؟؟؟؟
:افسرده:

اوبالیت به بو
شنبه 05 مرداد 1387, 11:08 صبح
بله.
دو تا راه دارين:
اگر مي خواين مقدار متغير ها تو حافظه اصلي بمونه و به فرم بعدي هم برين بايد از اين متد استفاده كنيد:

Form.Hide
ولي اگر مي خواين تمامي مقادير از حافظه پاك بشه و به فرم بعدي برين بايد از Unload استفاده كنيد.

Unload Form
Unload Me

مهران رسا
شنبه 05 مرداد 1387, 12:47 عصر
ولی با Unload شدن فرم ، مقدار متغیر ها تغییری نمی کنه ...

اوبالیت به بو
شنبه 05 مرداد 1387, 13:44 عصر
ولی با Unload شدن فرم ، مقدار متغیر ها تغییری نمی کنه ...

برای حرفت یه مثال میزنم:
پروژه شما 2 تا فرم داره به اسم Form1 و Form2.
اینم متغیرهاتون:

Option Explicit
Dim strName as String *10
Dim Counter As Byte
dim Var As Variant
حالا شما Caption فرمتون رو یه حالت Animation بده که به صورت حرف به حرف ظاهر بشه:

Private Sub Form1_Load()
Counter = 0
strName = "Welcome To BARNAMENEVIS.ORG"
v = Len (strName)
End Sub
Private Sub Timer1_Timer()
Me.Caption = Left$ (strName,Counter)
Counter = Counter + 1
if Counter = v Then
Timer1.Enabled = False
End If
End Sub
دو تا دکمه بزار CmdHide و CmdUnload.
حالا این کد ها رو بنویس:


Private Sub CmdHide_Click()
Me.Hide
Form2.Show
End Sub
Private Sub CmdUnload_Click()
Form2.Show
Unload me
End Sub
بعدش بیا در Form2 دوباره یه دکمه بزار که بتونی Form1 رو ببینی.
میبینی که هر وقت با Hide رفته باشی به Form2، وقتی بر میگردی دیگه اون Animation اجرا نمیشه ولی وقتی با Unload میری دوباره اجرا میشه چون متغیر خالیه.

اوبالیت به بو
شنبه 05 مرداد 1387, 13:46 عصر
اصلاً یه راه ساده تر یه متغیر درست کن و با همون دو تا دکمه برو به Form2 و دوباره برگرد Form1.
یه دکمه اضافی تو Form1 بزار و بنویس:

If IsEmpty(Var) Then
MsgBox "is Empty"
Else
MsgBox "Full"
End If

.:KeihanCPU:.
شنبه 05 مرداد 1387, 14:09 عصر
ولی با Unload شدن فرم ، مقدار متغیر ها تغییری نمی کنه ...

فکر نمیکنید اشتباه میکنید
تغییر میکنه

مهران رسا
یک شنبه 06 مرداد 1387, 08:24 صبح
سلام .

حالا من یک مثال می زنم .

یه متغیر در قسمت General به صورت زیر تعریف کنید :




Dim VAL As Integer



توی رویداد Load مربوط به فرم ، یه مقدار به متغیر بدید :




Private Sub Form_Load()
VAL = 8
End Sub



یه دونه Command Button هم روی فرم قرار بدید و کد زیر رو در رویداد Click بنویسید :




Private Sub Command1_Click()
Unload Me: Me.Show
MsgBox VAL
End Sub



وقتی رو Command Button کلیک میشه ؛ Unload Me: Me.Show اعمال میشه و بعد از اون متغیر VAL که قبلاً در رویداد Form_Load مقدار دهی شده بود توسط تابع Msgbox به نمایش در میاد و همانطور که ملاحظه خواهید کرد حتی پس از Unload شدن فرم متغیر VAL همچنان مقدار قبلی خود ، یعنی 8 را حفظ کرده .


این بود دلیل من برای حرفی که زدم .

.:KeihanCPU:.
یک شنبه 06 مرداد 1387, 09:29 صبح
وقتی رو Command Button کلیک میشه ؛ Unload Me: Me.Show اعمال میشه و بعد از اون متغیر VAL که قبلاً در رویداد Form_Load مقدار دهی شده بود توسط تابع Msgbox به نمایش در میاد و همانطور که ملاحظه خواهید کرد حتی پس از Unload شدن فرم متغیر VAL همچنان مقدار قبلی خود ، یعنی 8 را حفظ کرده
حق با شماست

vbhamed
یک شنبه 06 مرداد 1387, 10:16 صبح
سلام

دوست عزيزمون M8Spy درست ميگه
براي اينكه با Unload شدن فرم مقدار متغيرها هم پاك بشه از دستورات زير استفاده كنيد


Unload Form1
Set Form1 = Nothing

اوبالیت به بو
یک شنبه 06 مرداد 1387, 13:42 عصر
توی رویداد Load مربوط به فرم ، یه مقدار به متغیر بدید :


کد:

Private Sub Form_Load()VAL = 8End Sub


چون كه Form_Initialize بعدش Load ميشه معلومه كه مقدارش جديد ميشه و ميزنه Full. چون هر بار بعد از هر بار Load شدن Form مقدارش 8 ميشه.

مهران رسا
دوشنبه 07 مرداد 1387, 07:54 صبح
چون كه Form_Initialize بعدش Load ميشه معلومه كه مقدارش جديد ميشه و ميزنه Full. چون هر بار بعد از هر بار Load شدن Form مقدارش 8 ميشه.

درسته من نباید مقدار دهی متغیر رو در رویداد Load می نوشتم .
فریب دهنده بود ولی این هم روش صحیح :





Dim val As Integer
Private Sub CMDSetValue_Click()
val = 8
End Sub
Private Sub CMDTestValue_Click()
Unload Me: Me.Show
MsgBox val
End Sub