منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] سؤال حول الFunction - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [سؤال] سؤال حول الFunction (/showthread.php?tid=1752)



سؤال حول الFunction - Shaban boshi - 29-01-14

السلام عليكم
كما تعلمون فإن الدالة Function تقوم بإرجاع قيمة محددة /واحدة/ بعد حسابها
انا اريد ان تعطيني قيمتين Confused
مثلا انا لدي
Select Case A
Case 0.283 : N = 1 : D = 6
Case 0.565 : N = 2 : D = 6
Case 0.848 : N = 3 : D = 6
End Select
انا اريد ان يدخل البرنامج في هذا الFunction ويعطيني قيمة N و D معا
ويعود لل Sub الاساسي مع هذه القيمتين
كيف يمكن ان اجعلها تعطيني قيمتين معا ؟!!Huh
او هل هنالك دالة اخرى يمكنها عمل ذلك
وشكراً Smile


RE: سؤال حول الFunction - ناجي إبراهيم - 29-01-14

السلام عليكم...

يمكنك استعمال روتين (Sub) مع تمرير البارامترات التي تريد إرجاع قيم فيها بالمرجع (Pass by reference) و ذلك باستعمال الكلمة المحجوزة ByRef مع اسم البارامتر. مثلاً يمكن أن يكون تعريف الإجراء كالتالي:

كود :
Public Sub MyProcedure(ByVal A As Single, ByRef N As Integer, ByRef D As Integer)
    ' ...
    ' ...
    ' ...
End Sub

و عند استدعائه تقوم بتعريف متغيرين من نوع البارامترين (Integer في هذا المثال) لتمريرهما إلى الإجراء لاستقبال البيانات:

كود :
Dim X, Y As Integer

MyProcedure(0.565, X, Y)

لاحظ أن المتغير X سيأخذ قيمة N من داخل الإجراء، و المتغير Y سيأخذ قيمة D من داخل الإجراء.

نرجو الاستفادة و السلام.


RE: سؤال حول الFunction - Shaban boshi - 29-01-14

شكرا كتير والله يوفقكBlush


RE: سؤال حول الFunction - ممدوح الخطيب - 30-01-14

السلام عليكم ورحمة الله وبركاتة
ممكن عمل المطلوب في حالة جعل القيم العائدة من الفانكشن مصفوفة
مثال
كود :
Public Function MyProcedure(ByVal A As Single) As String()
        Dim arry(1) As String
        arry(0) = "D"
        arry(1) = "N"
        Return arry
    End Function

وتطبيق الدالة كالتالي
كود :
Dim a(1) As String
        a = MyProcedure(0.255)
        For i As Integer = 0 To a.Length - 1
            MsgBox(a(i))
        Next
بالتوفيق