PDA

View Full Version : سوال: بسته نشدن فرم شماره 2 در برنامم



mehdikhosravi
پنج شنبه 08 تیر 1391, 14:42 عصر
سلام ...خوبین
امیدوارم که اینطور باشه..
یه سوال:
یه برنامه ساختم که از 15 دقیقه تا 0 میشماره وقتی میرسه به 0 ارتباط رو با اینترنت قطع میکنه...
(البته هنوز کامل نشده)
یه مشکلی که دارم اینه که وقتی رسید به 0 فرم شماره 2 نمای داده میشه و مینویسه"ارتباط شما به طور کامل با اینترنت قطع شد" دفتی روی دکمه ضربدر برای بستن فرم کلیک میکنم فرم بسته نمیشه.
میخواستم شما دوستان برام درستش کنید(اگه میشه):
تر جیها وقتی به صفر رسید برای اینکه فرم باز بشه یه msgbox بیاد د بگه "ارتباط شما به طور کامل با اینترنت قطع شد" و وقتی بر روی دکمه ok کلیک کردم msgbox بسته بشه.یا
یه کاریش کنید که وقی فرم 2 نمایش داده شد دقتی فرم بستی به طور کامل اون فرم بسته بشه(تنها مشکل من اینه که فرم 2 بسته نمیشه)
ترجیها اگه با msgbox برام درستش کنید خیلی بهره
اینم سورسش دانلود کنید:
دانلود
(http://trainbit.com/files/7759289884/dis.zip)حجم:3 کیلوبایت
ایول

سید حمید حق پرست
پنج شنبه 08 تیر 1391, 14:54 عصر
سلام علیکم

سورس ویرایش شد و ضمیمه شد

موفق باشید


یا علی (غ)

just4froum
پنج شنبه 08 تیر 1391, 15:02 عصر
اولا لطفا سورس هارو توی خود سایت آپلود کنید.

دوما : سعی کن توی برنامه هات همیشه از کمترین تایمر استفاده کنی. احتمالا دلیل بسته نشدن برنامت هم همینه.(البته برای من بسته شد)
چون اگر تایمر ها زیاد باشن هم توی برنامت اختلال می اندازند هم دقیق بودنشون رو از دست میدن.

سوم : بفرمایید اینم از کد. اگر جاییشو نفهمیدی بگو برات توضیح بدم :

Dim TotalTime As Long
Private Sub Form_Load()
Timer1.Interval = 1000
TotalTime = (10 * 60) ' Daghighe
TotalTime = TotalTime + 59
Call FillLBL(TotalTime, Label1)
End Sub


Private Sub Timer1_Timer()
TotalTime = TotalTime - 1
Call FillLBL(TotalTime, Label1)
If TotalTime = 0 Then MsgBox "Ertebate shoma ba internet ghat shod", vbInformation: End
End Sub

Private Sub FillLBL(ByVal TT As Long, lbl As Label)
Dim Min As Long, Sec As Long
Min = Int(TT / 60)
Sec = TT Mod 60
lbl.Caption = CStr(Min) & ":" & CStr(Sec)
End Sub

mehdikhosravi
پنج شنبه 08 تیر 1391, 15:04 عصر
خیلی ممنون میشم توضیح بدی.......

اولا لطفا سورس هارو توی خود سایت آپلود کنید.

دوما : سعی کن توی برنامه هات همیشه از کمترین تایمر استفاده کنی. احتمالا دلیل بسته نشدن برنامت هم همینه.(البته برای من بسته شد)

سوم : بفرمایید اینم از کد. اگر جاییشو نفهمیدی بگو برات توضیح بدم :

Dim TotalTime As Long
Private Sub Form_Load()
Timer1.Interval = 1000
TotalTime = (10 * 60) ' Daghighe
TotalTime = TotalTime + 59
Call FillLBL(TotalTime, Label1)
End Sub


Private Sub Timer1_Timer()
TotalTime = TotalTime - 1
Call FillLBL(TotalTime, Label1)
If TotalTime = 0 Then MsgBox "Ertebate shoma ba internet ghat shod", vbInformation: End
End Sub

Private Sub FillLBL(ByVal TT As Long, lbl As Label)
Dim Min As Long, Sec As Long
Min = Int(TT / 60)
Sec = TT Mod 60
lbl.Caption = CStr(Min) & ":" & CStr(Sec)
End Sub

mehdikhosravi
پنج شنبه 08 تیر 1391, 15:10 عصر
میخوام وقتی msgbox فعال شد یه کدی فعال بشه که ارتباط رو از اینترنت قطع کنه(بدون اینکه بر روی ok کلیک کنی)

just4froum
پنج شنبه 08 تیر 1391, 15:24 عصر
یا علی همشو باشه :

Dim TotalTime As Long
ما توی این خط یه متغیر از نوع long میسازیم که در تمامی روال ها منظورم Timr1_timer و Foem_Load و FillLBL قابل استفاده هست چون بالای هر کدام هست.

Private Sub Form_Load()
Timer1.Interval = 1000
TotalTime = (10 * 60) ' Daghighe
TotalTime = TotalTime + 59
Call FillLBL(TotalTime, Label1)
End Sub

در خط بالا چیز مبهمی نداره فقط TotalTime (همون متغیرمون رو) بر حسب ثانیه مقدار دهی می کنیم.

Call FillLBL(TotalTime, Label1)

در این خط به سابروتینی که خودمون ساختیم ( اگه جریان سابروتین و ساختن اونو به وسیله خودمون نمی دونی اون یه جریان دیگست که برات بگم) مقدار totaltime و label مورد نظر رو میفرستیم

Private Sub Timer1_Timer()
TotalTime = TotalTime - 1
Call FillLBL(TotalTime, Label1)
If TotalTime = 0 Then MsgBox "Ertebate shoma ba internet ghat shod", vbInformation: End
End Sub

در این جا مقدار تایمر که 1 ثانیه هست هر 1 ثانیه یکبار از مقدار TotalTime 1 مقدار کم می کنه و دوباره سابروتین FillLBL رو صدا میزنه.

در خط آخرش هم چک میکنه که آیا مقدار TotalTime صفر شده یا نه اگر آری اونموقع پیغام میده که Ertebat ... و بعد از فشردن دکمه OK بر روی پیغام برنامه را می بندد.

یه نکته کلیدی : در ویژوال بیسیک شما می توانید دو کد را به دنبال هم بنویسید و با دو نقطه (:) از هم جدا کنید مثلا :
For x = 1 To 10: MsgBox "HELLO": Next x

Private Sub FillLBL(ByVal TT As Long, lbl As Label)
Dim Min As Long, Sec As Long
Min = Int(TT / 60)
Sec = TT Mod 60
lbl.Caption = CStr(Min) & ":" & CStr(Sec)
End Sub

این هم سابروتینی است که خودمون ساختیم.
مقدار ثانیه و دقیقه را از هم تفکیک می کنیم و در دو متغیر Min و sec می ریزیم و سپس در لیبلی که به ساب فرستاده شده نمایش می دهیم.

mehdikhosravi
پنج شنبه 08 تیر 1391, 15:28 عصر
میخوام وقتی msgbox فعال شد یه کدی فعال بشه که ارتباط رو از اینترنت قطع کنه(بدون اینکه بر روی ok کلیک کنی)

just4froum
پنج شنبه 08 تیر 1391, 20:19 عصر
به جای دستورات شما دستورات خودت رو بنویس :

Dim TotalTime As Long
Private Sub Form_Load()
Timer1.Interval = 1000
TotalTime = (10 * 60) ' Daghighe
TotalTime = TotalTime + 59
Call FillLBL(TotalTime, Label1)
End Sub


Private Sub Timer1_Timer()
TotalTime = TotalTime - 1
Call FillLBL(TotalTime, Label1)
If TotalTime = 0 Then Call Order: MsgBox "Ertebate shoma ba internet ghat shod", vbInformation: End
End Sub

Private Sub FillLBL(ByVal TT As Long, lbl As Label)
Dim Min As Long, Sec As Long
Min = Int(TT / 60)
Sec = TT Mod 60
lbl.Caption = CStr(Min) & ":" & CStr(Sec)
End Sub


Private Sub Order()
'dastoorat shoma
End Sub

mehdikhosravi
پنج شنبه 08 تیر 1391, 20:33 عصر
ببخشید ایمقدر سوال میکنم ولی منظور از دستورات خودت چیه؟

به جای دستورات شما دستورات خودت رو بنویس :

Dim TotalTime As Long
Private Sub Form_Load()
Timer1.Interval = 1000
TotalTime = (10 * 60) ' Daghighe
TotalTime = TotalTime + 59
Call FillLBL(TotalTime, Label1)
End Sub


Private Sub Timer1_Timer()
TotalTime = TotalTime - 1
Call FillLBL(TotalTime, Label1)
If TotalTime = 0 Then Call Order: MsgBox "Ertebate shoma ba internet ghat shod", vbInformation: End
End Sub

Private Sub FillLBL(ByVal TT As Long, lbl As Label)
Dim Min As Long, Sec As Long
Min = Int(TT / 60)
Sec = TT Mod 60
lbl.Caption = CStr(Min) & ":" & CStr(Sec)
End Sub


Private Sub Order()
'dastoorat shoma
End Sub

just4froum
پنج شنبه 08 تیر 1391, 20:54 عصر
ببخشید ایمقدر سوال میکنم ولی منظور از دستورات خودت چیه؟

ببین یه جایی توی سورس هست نوشتم dastoorat shoma دقیقا در این قسمت :

Private Sub Order()
'dastoorat shoma
End Sub

خوب برای Disconnect شدن هم که تاپیک زدی و روششو بلدی همونجا به جای dastoorat shoma کدی رو بنویس که می خوای قبل از اجرای msgbox اجرا بشه.

اینجوری نوشتم که در آینده به جای dastoorat shoma هر کدی رو بتونی بنویسی.

موفق باشید