ورود

View Full Version : فراخوانی یک تابع از داخل تکست باکس



moustafa
چهارشنبه 09 آبان 1403, 11:10 صبح
با سلام
نام یک فانکشن رو داخل یک تکست باکس قرارد ادیم میخوایم اون فراخونی کنیم از چه کدی استفاده کنیم (چندتا فانکشن رو داخل یک جدول ریختیم بسته به رکورد فانکشن اون رو فراخوانی کنیم )

call me.TextBox1

moustafa
چهارشنبه 09 آبان 1403, 21:18 عصر
Application از نوع کلاس
Me.txtsub نام تابع از نوع رشته


Application.Run (Me.txtsub)

moustafa
چهارشنبه 09 آبان 1403, 21:21 عصر
و اگر تابع مون داری متغیرهای v1 , v2 , ... باشن

Application.Run (Me.txtsub,v1,v2)

mazoolagh
پنج شنبه 10 آبان 1403, 12:25 عصر
سلام و روز خوش

یک function (و نه sub) رو میتونین با استفاده از تابع eval سدا بزنین.

مثلا یک تابع By2 داریم که عدد N رو میگیره و در 2 ضرب میکنه و برمیگردونه:
FUNCTION By2(N AS INTEGER) AS INTEGER
By2=N*2
END FUNCTION
اینجوری میتونین استفاده کنین:
DIM K AS INTEGER
K=EVAL("By2(5)") ' K <== 10

یا اگر sub نیاز دارین که مقداری برنمیگردونه بازهم باید اون رو function تعریف کنین:
FUNCTION SHOW(i AS INTEGER , s AS STRING)
MSGBOX "s=" & s & VBCRLF & "i=" & i
END FUNCTION
و اینجوری سدا بزنین:
Eval("SHOW(8 ,""moustafa"")")

mazoolagh
پنج شنبه 10 آبان 1403, 12:38 عصر
یک نمونه کار با eval رو در پست شماره 20 تاپیک زیر میتونین ببینین:

https://barnamenevis.org/showthread.php?539924

moustafa
جمعه 11 آبان 1403, 23:50 عصر
سلام وعرض ادب خدمت استاد و سرور گرامی
از بذل توجه همیشگی تون سپاسگذارم
دقیقا همچین چیزی میخواستم نام ساب یا فانکشن رو در قالب رشته بدی call کنه
درApplication.Run فقط باید نام تابع رو وارد و پارامترها رو با شرط وبطور دستی وارد کنی ولی با این تابع Eval کل تابع رو با آرگومانهاش یجا وارد میکنی

Private Sub tv2_NodeClick(ByVal Node As Object)
Dim x As Integer
Dim func As String
x = Mid(Node.Key, 2, Len(Node.Key) - 1)
func = Nz(DLookup("funcName", "tblnodes", "keynode=" & x), "")
If Not IsNull(func) And func <> "" Then
If x = 37 Then
Application.Run func, Forms!frmMain
Else
Application.Run func
End If
End If
' Select Case Node.Key
' Case "x26"
' Call Form_frmMain3.btnSabtSand_Click
' Case "x27"
' DoCmd.OpenForm "frmAmaliyat_gharardad"
' End Select
End Sub

moustafa
جمعه 11 آبان 1403, 23:55 عصر
با تابع Eval




Private Sub tv2_NodeClick(ByVal Node As Object)
Dim x As Integer
Dim func As String
x = Mid(Node.Key, 2, Len(Node.Key) - 1)
func = Nz(DLookup("funcName", "tblnodes", "keynode=" & x), "")
If Not IsNull(func) And func <> "" Then
Eval(func)
End If
' Select Case Node.Key
' Case "x26"
' Call Form_frmMain3.btnSabtSand_Click
' Case "x27"
' DoCmd.OpenForm "frmAmaliyat_gharardad"
' End Select
End Sub