PDA

View Full Version : اجرای یک رشته string بعنوان یک تابع



project80888
سه شنبه 08 آذر 1390, 10:31 صبح
سلام دوست
تو دات نت فرقی نمیکنه وبی یا سی شارپ
چه جوری میشه یه مقدار string به عنوان یه تابع اجرا بشه من مجبور هستم بعضی از توابع را در بانک ذخیره کنم
و کاربر با دسترسی به اون رکورد در برنامه بتونه اون مقدار String به عنوان یه تابع اجرا کنه مثلا تابع زیر در نظر بگیرید
PrivateSub SelectedChildMenu_OnClick(ByVal sender AsObject, ByVal e As System.EventArgs)
If bl_permisionList = FalseThen
Dim frm AsNew FrmRequest
frm.MdiParent = Me
frm.sendfrommainform = sender.ToString()
frm.Show()
EndIf
EndSub

این رویداد در یکی از فرم های برنامه ام هست
که می خواهم این رویداد فراخوانی بشه
در بانکم ایتم های زیر را دارم
نام فرم - مقدار text فرم و رویداد های آن فرم


ممنون میشم

Soroush.Sarabi
سه شنبه 08 آذر 1390, 11:24 صبح
دوست عزیز منظورتون از اجرا شدن String به عنوان تابع چیه؟

project80888
سه شنبه 08 آذر 1390, 11:25 صبح
منظورمو که اصلا خیلی واضع است
بذار راحتر بگم
توی فرمم یه سری تابع دارم
می خوام با داشت نام تابع اون تابع اجرا بشه
مثلا اگر داخل textbox وارد کردم SelectedChildMenu_OnClick تابع بالای اجرا بشه
می خوام کاملا پویا باشه
و از if و غیر ... نمی خوام استفاده کنم

project80888
سه شنبه 08 آذر 1390, 11:56 صبح
ممنون
ولی کاش یه کمی توجه به سوالم داشتید مخصوصا قسمت اخر {و از if و غیر ... نمی خوام استفاده کنم

{و از if و غیر ... نمی خوام استفاده کنم}
فرض کنید من 2000 تابع داخل جدول بانک داشته باشم
و بخواهم از روش شما استفاده کنم
من دنبال دستوری یا تکه کدی هستم که با گرفتن نام تابع از نوع Sting تابع اجرا بشه
امیدوارم منظورمو متوجه بشید
ممنون

project80888
سه شنبه 08 آذر 1390, 13:40 عصر
ممنون دوستان تا حدی تونستم
Public Function one() As String
MessageBox.Show(" one")
Return "11"
End Function

Public Shared Function a44() As String
Return ""
End Function


Public Sub two(ByVal a As String, ByVal b As String)
MessageBox.Show("two")
End Sub



Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim methodInfos As MethodInfo() = GetType(Form1).GetMethods(BindingFlags.[Public] Or BindingFlags.[Static])
For Each methodInfo As MethodInfo In methodInfos
MessageBox.Show(methodInfo.Name)
methodInfo.GetParameters()
Next
Dim s As String = "one"
CallByName(Me, s, CallType.Method)
s = "two"
Dim a2(2) As String
a2(0) = ""
a2(1) = ""

CallByName(Me, s, CallType.Method,
End Sub

فقط یه مشکل کوچلو
اونم اینکه وقتی خط آخر اجرا میشه
CallByName(Me, s, CallType.Method, a2)
خطا میده
Overload resolution failed because no accessible 'two' accepts this number of arguments
کسی نمی دونه اشکال چیه؟

project80888
سه شنبه 08 آذر 1390, 13:55 عصر
مشکل من حل شد
اما لازم دانستم یه توضیحاتی در مورد کدهای بالا بدم امید است که به دردتون یخورد
من جهت ساخت منوی سفارشی تو فرم هام به این تکه کد نیاز داشتم یعنی کاربر بتونه خودش به فرم منوی دسترسی اضافه کنه
برای این کار
سع تابع نوشتم
1= بتونه تمام توابع داخل فرم تشخیص بده
که تکه کدش بالا نوشتم
البته توی سی شارپ حتما توابع باید به صورت Static باشه
2=به ویژگی های تابه دسترسی داشته باشم
3=با دسترسی به نام رویدهاو توابع بتونم اونها را اجرا کنم
اگه در این مورد سوالی داشتید می تونید بپرسید
ممنون از لطف همه دوستان