PDA

View Full Version : سوال: مشکل عجیب در فراخوانی یک روال Sub



.:KeihanCPU:.
شنبه 28 دی 1387, 22:10 عصر
سلام
بدون هیچ مقدمه ای یک روال به صورت زیر دارم




Sub Protect(ByVal Status As Boolean, ByVal Sender As String)

If Status = True Then
Timer1.Enabled = True
StartB.Enabled = False
StopB.Enabled = True
Else
StartB.Enabled = True
StopB.Enabled = False
Timer1.Enabled = False
End If


End Sub



StartB و StopB دکمه هستند.
وقتی از داخل همون فرم که روال داخلشه روال رو فراخوانی میکنم هیچ مشکلی نیست.
ولی وقتی از یه فرم دیگه روال رو فراخوانی میکنم فقط تایمر خاموش و روشن میشه و دکمه ها هیچ تغییری نمیکنند.
به نظر شما مشکل چیه؟
من که قاطی کردم!!!

Chabok
شنبه 28 دی 1387, 22:36 عصر
به این صورت تغییر دهید ببینید درست می شود ؟

Me.StartB.Enabled = False

.:KeihanCPU:.
شنبه 28 دی 1387, 22:39 عصر
به این صورت تغییر دهید ببینید درست می شود ؟

Me.StartB.Enabled = False
این کار دیگه واسه چی؟

اوبالیت به بو
شنبه 28 دی 1387, 23:22 عصر
ولی وقتی از یه فرم دیگه روال رو فراخوانی میکنم فقط تایمر خاموش و روشن میشه و دکمه ها هیچ تغییری نمیکنند.
چگونه اين كار رو انجام ميدين؟

.:KeihanCPU:.
یک شنبه 29 دی 1387, 13:56 عصر
چگونه اين كار رو انجام ميدين؟



Call Protect(True,"F1e)


البته متغیر Sender اینجا کاربردی نداره

nokhodsiah2001
یک شنبه 29 دی 1387, 15:29 عصر
سلام
خاصیت Modifiers کلید رو برابر Friend یا Public بذار احتمالاً حل بشه

#target
یک شنبه 29 دی 1387, 21:27 عصر
فرض کنیم دو فرم داری با نامهای form1 , form2 و این تابع روی فرم 1 هست و می خوای از فرم 2 فراخوانی کنی
اولا خط اولتو به این صورت تغییر بده
public Sub Protect(ByVal Status As Boolean, ByVal Sender As String)
دوما در بخش تعاریف form2 بنویس
Private form1 as new form1
حالا هر جا در form2 میخوای تابع رو فراخوانی کنی بنویس
form1.Protect(<PARAMETERS>)

.:KeihanCPU:.
یک شنبه 29 دی 1387, 22:03 عصر
ممنون از توجهتون


خاصیت Modifiers کلید رو برابر Friend یا Public بذار احتمالاً حل بشه

فرقی نکرد,از اولم Freind بود


فرض کنیم دو فرم داری با نامهای form1 , form2 و این تابع روی فرم 1 هست و می خوای از فرم 2 فراخوانی کنی
اولا خط اولتو به این صورت تغییر بده
public Sub Protect(ByVal Status As Boolean, ByVal Sender As String)
دوما در بخش تعاریف form2 بنویس
Private form1 as new form1
حالا هر جا در form2 میخوای تابع رو فراخوانی کنی بنویس
form1.Protect(<PARAMETERS>)

درست نشد!!!

#target
دوشنبه 30 دی 1387, 09:59 صبح
سلام مشکلتو حل کنم

این مشکل زمانی پیش می آد که تابع در فرم اولت باشه پس باید با استفاده از event ها اونو فراخوانی کنی
در فرم 2 که می خوای تابع رو فراخوانی کنی در بخش تعریفات بنویس
Public Event a1()
حالا هر جا بجای اینکه تابع رو فراخوانی کنی بنویس
RaiseEvent a1()

حالا بیا تو فرم 1 که تابع در اون وجود داره و در قسمت تعریفاتش بنویس
Dim WithEvents form2 As New Form2
و یک تابع تعریف کن در فرم 1 بصورت
Public Sub Test() Handles form2.a1
Protect002(True,"TEST")
End Sub
حالا مشکت حل میشه من خودم امتحان کردم

حالا چرا چون فرم مستر و اصلی هست پس نمی تونی تغییرات رو از جای دیگه انجام بدی پس در فرم 2 یک رویداد تعریف کردیم و بجای اینکه تابع رو در فرم 2 اجرا کنیم رویداد رو اجرا می کنیم و چون در فرم 1 گفتیم که وقتی رویداد رخ داد تابع رو اجرا کن پس چون تابع از خود فرم اجرا شده مشکلی نیست ..
در ضمن مقدار ها رو هم میتونی با یک مقدار پابلیک انتقال بدی

اگه سوال داری بپرس ؟

.:KeihanCPU:.
دوشنبه 30 دی 1387, 10:39 صبح
کارهایی که گفتین رو کامل انجام دادم
هنگام ورود به فرم اصلی این مشکل پیش میاد!!!
27520

#target
دوشنبه 30 دی 1387, 11:34 صبح
اگر دو فرم با نامهای Form1 و Form2 داشته باشیم اونوقت در تعاریف فرم 1 بنویسیم
Dim form2 As New Form2
و در فرم 2 تعریف کنیم
Dim form1 As New Form1
این خطا در فرم 1 یعنی در
Dim form2 As New Form2
رخ میده پس شما وارد فرم Dialog1 تون بشین و احتمالا در اونجا تعریف کردین
Dim form1 As new FrmCP
که اون کلمه new مشکل سازه اگه new براتون مهم نیست پاکش کنین درست میشه