الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعلم كيفية انشاء مندوبين عن الاجرائات

بدأه alialalian في 4 يونيو 2009 · 9 رد · 705 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

سنتعلم طريقة انشاء مندوب لاي اجراء نريد

اولا : نقوم بالتصريح عن اجرائين مثلا:

	Sub msg1(ByVal s As String)
		MsgBox(s)
	End Sub
	Sub msg2(ByVal t As String)
		MsgBox("welcome " + s)
	End Sub

حيث نلاحظ ان لهما نفس الوسائط

الان نصرح عن مندوب يشبه كلا منهما ايضا بالشكل التالي:

Delegate Sub str(ByVal txt As String)

الان جاء وقت الاختبار المندوب ندرج زر وليكن Button1

نكتب في حدث الضغط له :

1. نعرف متحولين str1, str2 من نوع المندوب

Dim str1, str2 As str

2. بالنسبة للاول نجعل عنوانه يشير الى الاجراء الاول والمتحول الثاني يشير الى الاجراء الثاني

		str1 = AddressOf msg1
		str2 = AddressOf msg2

3. اخيرا استدعاء الاجراء :

		str1.Invoke("ali")
		str2.Invoke("ali")

لاحظوا الفرق وهنا تكمن الفائدة

#2

موضوع رائع أخى الكريم

و قليلين من مبرمبجين ال Visual Basic اللى بيتطرقو لمثل هذة المواضيع

بس ليا ملاحظة وحيدة لو تسمحلى

هييجى واحد مبتدئ يسألك طيب اية الفرق بين

Call msg1("Ali")

و 

str1.Invoke("ali")

نتمنى المزيد من المواضيع الرائعة مع مزيد من الإستفاضة فى الشرح

جازاك الله كل خير

#3

ana wa7ed men el Mobtade2en we 3aiz 2a3raf eh el far2 we ana mesh fahem 7aga 3ala fekraa leh kol dah

we ya rat terfa3 el Mashroo3 3ashan nefhaam 2aktaar

mashkoor 3ala el maghood

تم تعديل هذه المشاركة بواسطة kazabra في 4 يونيو 2009 في 13:22

#4

And I wana To say Something Many Person Doesn't Know It

there is Different between

Dim Str1 , str2 as Str

And

Dim Str1 as Str , Str2 as Str

Second One Both is Of Kind Str

But

First One

Str1 Of Kind Variant

Str2 Of Kind Str

#5

شكرا للجميع

وانا سعيد بالتفاعل مع الموضوع على خلاف ماتوقعت

باختصار وللتوضيح يمكننا المندوب من التعامل مع الاجراء كاي متحول

والتعامل مع المتحولات واسع جدا ولا يمكن الاحاطة به

ولكن للتوضيح نحن نعرف اننا نستطيع ارسال متحول الى اجراء كوسيط

ولكن لا نستطيع ارسال اجراء كوسيط الى اجراء اخر

وكن الفرق في ارسال المندوب كوسيط لا نرسل قيمة وانما نرسل عنوان الاجراء المطلوب

حتى تتضح الفكرة

ننشىء اجراء جديد كتالي :

	Sub aaaa(ByVal a As String, ByVal b As str)
		b.Invoke(a)
	End Sub

ثم نكتب في حدث الضغط لزر button2 مثلا التالي :

aaaa("ali", AddressOf msg1)

هذا مثال بسيط اعتقد انه يوضح كم اصبح التعامل مع الاجراءات كالتعامل مع المتحولات

وذكرنا سابقا ان التعام لمع المتحولات واسع فاي شي ينطبق على المتحولات ينطبق على

المندوب

اتمنى ان تكون الفكرة وصلت واجابت على التساؤلات

#6

اي سؤال

#7

هو الفكرة وصلت ، و انا سعيد جدا بموضوع حضرتك

و مشكور جدا على المجهود الرائع أخى الكريم

بس ليا طلب عند حضرتك ، لو مثال صغير كدة يوضحلى و يوضح للإخوة الأعضاء

فائدة إنشاء مندوبين عن الإجراءات

و لو حضرتك تسمحلى انا ليا ملاحظة صغيرة

يا ريت بالنسبة للمصطلحات يبقى فى ترجمة (معظم المبرمجين يحتاجو المصطلحات الإنجليزية ) لأانى تهت شوية و انا بقرأ أخر رد

زى مثلا :

متحول

إجراء

وسيط

مندوب

معلش يا باشا تعبينك معانا

و جازاك الله كل خير على الموضوع الرائع و النادر ان يتكلم فيه أحد و انا شخصيا اعتبره من المواضيع المتقدمة

تقبل خالص تحياتى و جزيل شكرى ........

#8

ولا يهمك اخي إن شاء الله رح اشتغل مثال يوضح الفكرة بشكل اكبر

اما بالنسبة للمصطلحات

اجراء :Procedure

دالة :Function

المتحولات او المتغيرات : variable

الوسيط : متحول يرسل الى اجراء او دالة

اما تعريف المندوب هو تعريف متحول من نوع اجراء معرف مسبقا : Delegate

#9

مشكور جدا جدا جدا جدا ،

نورت المنتدى

يا ريت مزيد من المشاركات الجميلة دى لأن انا بعتبر انها من صلب البرمجة

جازاك الله كل خير يا أخى الكريم

#10

السلام عليكم اعتذر عن التأخر بالرد بسبب انشغالي

اما وقد وعدتكم بمثال فقد وجدت مثال جاهز ومن خلاله تستطيع قياس سرعة تنفيذ اي اجراء(Procedure)

عن طريق تحديد زمن البدء والانتهاء ثم طرحها من بعضها

 
 Delegate Sub dlgTimeIt()
	Function TimeIt(ByVal [sub] As dlgTimeIt) As TimeSpan
		' البداية
		Dim start As Date = Now
		' تنفيذ الاجراء
		[sub].Invoke()
		' العودة بالوقت
		Return Now.Subtract(start)
	End Function

 '.....................................
	'مثال لأستخدامها
	Sub Test()
		Dim counter As Long
		For counter = 0 To 100000000
		Next
	End Sub
	Sub Main()
		Dim t As TimeSpan
		t = TimeIt(AddressOf Test)
		Console.WriteLine(t)
	End Sub

وهذا المثال مؤقت حتى لا أتأخر أكثر

حيث اعتزم ذكر تطبيق كامل من كتابتي في موضوع مستقل ان شاء الله

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…