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

درس في الإجراءات الفرعية ( العامة )

مغلق
بدأه yaseralshikh في 15 أكتوبر 2006 · 19 رد · 7,496 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

درس في الإجراءات الفرعية ( العامة )

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

وبه أبدا وأستعين ، وأختم بالصلاة والسلام على خاتم الأنبياء والمرسلين ، أما بعد ..

هذا الدرس المتواضع أحب أن أوضح فيه أمور ربما تخفى على المبتدئين في البرمجة مع العلم أني واحداً منهم ولكني أدلو بدلوي في علم تعلمته وأريد أن يتعلمه الجميع ..

أهداف الدرس:

1- أن يتعرف المبرمج على مفهوم الإجراء الفرعي .

2- أن يتعرف المبرمج على فوائد الإجراءات الفرعية.

3- أن يتعرف المبرمج على أنواع الإجراءات الفرعية.

4- أن يكتب المبرمج إجراءاته الفرعية الخاصة من نوع SubRoutine .

5- أن يكتب المبرمج إجراءاته الفرعية الخاصة من نوع Function.

6- أن نبني مكتبه من الإجراءات الفرعية العامة ، تكون مرجع للمبرمج عند الحاجة .

** أن الإجراءات الفرعية ( العامة ) لا ترتبط بحدث معين ، ولكنها تقوم بمهام عامة مثل إجراء الحسابات أو معالجة البيانات بطريقه معينه يحددها المبرمج.

** ومن أهم الفوائد في كتابة الإجراءات الفرعية هو كتابة كود برمجي سهل في الكتابة والتحديث والصيانة وكذلك عدم تكراره في أماكن أخرى من البرنامج حيث يتم استدعائه كلما تطلب الأمر.

** وتنقسم الإجراءات الفرعية ( العامة ) إلى قسمين :

- روتين فرعي SubRoutine يقوم بمجموعة من العمليات التي يحددها المبرمج ولا يعود يقيمه .

- دالة Function تقوم بمجموعة من العمليات التي يحددها المبرمج وتعود بقيمه يحتاجها المبرمج في مكان أخر

من البرنامج .

** كتابة الإجراءات الفرعية من نوع SubRoutine :

قبل كتابة الروتين الفرعي يجب أن نختار إما أن نجعل هذا الروتين خاص من نوع Private Sub بحيث لا يمكن استدعاؤه إلا من داخل الملف ( Form ) الذي يعيش فيه ، أو مشترك من نوع Public Sub بحيث نتمكن من استخدامه من أي مكان آخر داخل البرنامج . وبعد ذلك يجب أن نختار اسم لهذا الإجراء وأنصح بكتابة أسماء واضحة وغير غامضة ، ثم نكتب مجموعة من العمليات التي نحتاجها وفي نهاية الإجراء نقوم بقفله. وكي يتضح المقال نورد المثال ..

مثال1: لنفرض أنه لدينا مجموعة من أدوات التحكم ولتكن أزرار الأوامر التي يحتاج برنامجنا إلى إيقاف عملها عند نقطه معينه و إعادتها للعمل عند نقطة أخرى ، وذلك في أكثر من موقع في نفس الفورم ، وبدل من كتابة نفس الأوامر في كل مره يمكننا أن نقوم بكتابة إجراء فرعي من نوع روتين فرعي لإيقاف عملها كما يلي ..

Private Sub EnableButton ()
	Btn1.Enabled= True
Btn2. Enabled =True
Btn3.Enabled =True
Btn4.Enabled =True
End Sub

وعند الرغبة في تنفيذ هذا الروتين في أي موضع في نفس الفورم نكتب EnableButton فقط .

وبنفس الطريقة نقوم بكتابة إجراء فرعي من نوع روتين فرعي لإعادة تشغيل عملها كما يلي ..

Private Sub DisableButton ()
	Btn1.Enabled= False
Btn2. Enabled = False
Btn3.Enabled = False
Btn4.Enabled = False
End Sub

وعند الرغبة في تنفيذ هذا الروتين في أي موضع في نفس الفورم نكتب DisableButton فقط .

*كما يمكننا تمرير البيانات إلى الإجراءات الفرعية وذلك عندما يحتاج هذا الإجراء إلى قيمه معينه ومتغيره، ولكي يتم ذلك يجب أن نذكر عدد المتغيرات وأنواعها عند كتابة رأس الإجراء . وكي يتضح المقال سوف نورد مثال ...

مثال 2: لنفرض أن برنامجنا يحتاج إلى إجراء عملية حسابيه مستخدمين بيانات متغيره ، وذلك في أكثر من موضع في البرنامج وبعد ذلك يقوم بعرض النتيجة في مربع رسالة ، إذا نحن نحتاج إلى إجراء فرعي مشترك من نوع روتين فرعي نمرر له مجموعة من البيانات على حسب طلبات البرنامج ، وذلك كما يلي ...

	Public Sub ComputationRate(ByVal Value1 As Single, ByVal Value2 As _
		   Single, ByVal Value3 As Single)
		Dim MyValue As Single
		MyValue = (Value1 + Value2) / Value3
		MsgBox(MyValue)
	End Sub

كما نشاهد لقد كتبنا Public Sub وذلك كي نجعل هذا الإجراء مشترك ، واسم الإجراء ComputationRate والقيمة الأولى Value1 من نوع Single والقيمة الثانية Value2 من نوع Single والقيمة الثالثة Value3 من نوع Single ( ملاحظة أن البرنامج سوف يقوم بكتابة ByVal بشكل تلقائي أمام كل متغير وذلك أنه يوجد لدينا طريقتان من التمرير وهي إما التمرير بالقيمة وهي أن نستخدم ByVal من أجل أن نمرر قيمة المتغير مع حماية المتغير من التعديل ، أو التمرير بالإشارة وهي أن نستخدم ByRef وهي تعني أن المتغيرات التي نمررها يمكن تعديلها في الإجراء الذي نمررها له . ومثل هذا التفصيل لن يفيدنا هنا ) .

وعند الرغبة في تنفيذ هذا الإجراء نكتب اسم الإجراء ونمرر له البيانات كما يلي ..

ComputationRate(6, 4, 2) وعند تشغيل البرنامج وتنفيذ الإجراء يظهر مربع رسالة وفيه نتيجة الإجراء وهو الرقم 5 .

* كما يمكننا أن نمرر الأدوات إلى الإجراءات الفرعية وذلك إن المتغيرات ليست هي النوع الوحيد الذي يمكننا تمريره إلى الإجراءات ، فمن الممكن أن نمرر أدوات التحكم أيضاً ، ولكي نمرر أدوات التحكم إلى الإجراء الفرعي نستخدم عبارة As Object في رأس الإجراء وذلك عند الحاجة لكي نحدد أن القيمة التي نمررها عبارة عن أداة تحكم ، وفي داخل الإجراء نستخدم أمر If Typeof لكي نتعرف على نوع الأداة التي يتم تمريرها إلى الإجراء . وكما يقال بالمثال يتضح المقال .

مثال 3 : هنا نستخدم مثال بسيط والغرض منه توضيح الفكرة فقط ، حيث نعد إجراء فرعي يخبرنا بنوع أداة التحكم التي مررناها للإجراء وذلك في مربع رسالة ..

	Private Sub TellMeAbout(ByVal MyObject As Object)
		If TypeOf MyObject Is Button Then MsgBox("لقد مررت زر أمر")
		If TypeOf MyObject Is TextBox Then MsgBox("لقد مررت مربع نص")
	End Sub

ولكي ننفذ الإجراء نكتب TellMeAbout(Button1) كي تظهر لنا رسالة تخبرنا بنوع أداة التحكم المدخلة .

مثال 4 : لنفرض أن لدينا برنامج به الكثير من مربعات النص ونريد أن نفرغها جميعا من البيانات كي نعيد إدخال بيانات جديدة ، بالطبع سوف نقوم بكتابة الكود التالي ..

Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
Text8.Text = ""
Text9.Text = ""
Text10.Text = ""
....الخ

ولكنا لو استخدمنا إجراءاً فرعياً خاصاً سوف يغنينا عن كتابة كل هذه السطور مهما كان عدد مربعات النص ومهما تطلب تكرار هذه العملية في أجزاء أخرى من النموذج ( الفورم ) ..

ولكنا في هذا المثال لن نحتاج إلى استخدم عبارة As Object في رأس الإجراء ، فلنلقي نظرة للكود التالي ثم نتابع الشرح...

1	Private Sub CLEARDATA() ' هذا الاجرائ يستدعا من داخل الفورم
2		Dim txt As Control
3		For Each txt In Me.Controls
4			If TypeOf txt Is TextBox Then 
5				txt.Text = ""
6			End If
7		Next
8	End Sub

في السطر رقم 1عرفنا الإجراء الذي سميناه CLEARDATA على أنه خاص بهذا النموذج ( الفورم ) .

في السطر رقم 2 أعلنا عن متغير أسمناه txt وحددنا أن نوعه Control .

في السطر رقم 3 أنشأنا تكرار باستخدام الأمر For Each لكل أدوات التحكم في النموذج .

في السطر رقم 4 شرطنا على أداة التحكم التي أمسك بها الأمر السابق فيما إذا كانت مربع نص ( طبعاً استخدمنا العبارة TypeOf ) فإنه ينفذ الأمر الموجود في السطر رقم 5.

في السطر رقم 5 طلبنا من البرنامج أن يقوم بتفريغ مربع النص من البيانات .

في السطر رقم 6 قمنا بقفل أمر الشرط السابق ذكره ، علماً أنه يمكننا كتابة مجموعة من الأوامر قبل القفل .

في السطر رقم 7 نطلب من الأمر For الإمساك بأداة التحكم التالية في النموذج وهكذا .

في السطر رقم 8 ننهي الإجراء الفرعي .

ولكي نستدعي الإجراء نكتب CLEARDATA فقط ، في أي جزء من النموذج .

مثال 5 : لنفرض أنه لدينا أكثر من نموذج ( Form ) ، ونريد أن نطيق المثال رقم 4 فماذا نفعل ؟

الأمر بسيط ، وهو أن نعد الإجراء على أنه مشترك ونقوم بتعديل بسيط على الكود كما يلي ..

	Public Sub CLEARDATA(ByVal frm As Form)
		Dim txt As Control
		For Each txt In frm.Controls
			If TypeOf txt Is TextBox Or TypeOf txt Is ComboBox Then
				txt.Text = ""
			End If
		Next
	End Sub

ولكي نستدعي الإجراء نكتب CLEARDATA(Me) فقط ، في أي جزء من البرنامج .

** كتابة الإجراءات الفرعية من نوع Function :

بنفس الأسلوب الذي استخدمناه مع الإجراءات الفرعية من نوع SubRoutine سوف يكون العمل إلا أنه سوف يختلف قليلاً ، حيث أن الدالة Function تختلف في طريقة الإعلان عنها وفي أنها تعود بقيمه كما ذكرنا سابقاً ، وهي تستخدم متغيراً لتحتفظ فيه بالقيمة التي سوف تعود بها الدالة ، مع مراعاة تحديد نوع المتغير...

مثال 6 : لنفرض أننا نريد أن نجري عمليه حسابية ( بسيطة أو معقده على حسب احتياجنا ) لمجموعة من المتغيرات ونريد أن نظهر النتيجة في مربع نص ، ونريد أن نقوم بذلك في أجزاء متعددة من النموذج ، فهل نكتب هذه العملية كلما احتجنا لها ؟

بالطبع إن كتابة إجراء فرعي من نوع Function خير سبيل لذلك ، ولتكن العملية الحسابية كما يلي ..

((Value1 + Value2)* Value3)/2
[Code/]
ولندرس الآن كيف سوف يكون الكود الخاص بهذا الإجراء ..
[Code]
  Private Function ComputationRate(ByVal Value1 As Single, ByVal Value2 _
		  As Single, ByVal Value3 As Single) As Single
		Dim MyOutCome As Single
		MyOutCome = ((Value1 + Value2)* Value3)/2 
		Return MyOutCome
	End Function

في البداية أعلنا عن الإجراء الفرعي بأنه من النوع خاص وأسمه ComputationRate وأنه من النوع Single ، وقمنا بتحديد عدد المتغيرات التي نحتاجها فيه مع ذكر نوع كل متغير ، وبعد ذلك صرحنا عن متغير من نوع Single وأسميناه MyOutCome لكي نخزن فيه نتيجة العملية الحسابية وهذا ما حدث في السطر الذي يليه ، وقبل أن ننهي الإجراء الفرعي أستخدمنا الكلمه Return لكي نرجع القيمه المخزنه في MyOutCome إلى الإجراء ComputationRate لأنها هي القيمة التي سوف يعود بها هذا الإجراء .

ولنكي نستدعي هذا الإجراء الفرعي ونملئ به مربع النص نكتب ..

Text1.Text = ComputationRate(3, 1, 5)

فيكون الرقم المكتوب في مربع النص هو الرقم 10 .

مثال 7 : لنفرض أنه لدينا مشروع كبير وبه مجموعة من النماذج ، كل نموذج به مجموعة من مربعات النص والقوائم المنسدلة ، وأننا نحتاج في نقطه معينة التأكد من عدم خلو هذه الأدوات المذكورة من البيانات لكي تتم معالجتها ، فهل نكتب على سبيل المثال الكود بهذا الشكل ..

If Text1.Text<>"" Or Text2.Text<>"" Or Text3.Text<>"" Or Text4.Text<>"" Or 
   Text5.Text<>"" Or Text6.Text<>"" Or Text1.Text<>"" Or ComboBox1.Text<>""  
   Or ComboBox2.Text<>"" Then
   -
   --
   ---
Else
   MsgBox("يجب التأكد من أن جميع البيانات مدخلة")
End If

بالطبع لا إن ذلك مضيعة للوقت والجهد ، ولكن مار أيكم لو كتبنا إجراء فرعي يقوم بالتأكد من عدم خلو هذه الأدوات من البيانات كي يتم معالجتها .

إذا فلندرس الكود التالي وهو عبارة عن إجراء فرعي من نوع Function مشترك ويعود بقيمة إما صائب أو خاطئ ..

1	Public Function NothingNullDATA(ByVal frm As Form) As Boolean							  
2		Dim txt As Control
3		Dim NothingIsNull As Boolean = True
4		For Each txt In frm.Controls
5			If TypeOf txt Is TextBox Or TypeOf txt Is ComboBox Then
6				If txt.Text = "" Then
7					NothingIsNull = False
8				End If
9			End If
10		Next
11	   Return NothingIsNull
12	End Function

في السطر رقم ( 1 ) قمنا بالتصريح عن الإجراء الفرعي الذي أسميناه NothingNullDATA على انه مشترك بين جميع النماذج في البرنامج ، وهو من نوع Function ويعود بقيمة إما صائب أو خاطئ ، وله متغير واحد فقط من نوع Form وهو هنا اسم النموذج الذي نريد أن نطبق هذا الإجراء عليه .

في السطر رقم ( 2 ) قمنا بالتصريح عن متغير أسميناه txt وهو من نوع Control أي أداة تحكم.

في السطر رقم ( 3 ) قمنا بالتصريح عن متغير أسميناه NothingIsNull وهو من نوع Boolean وأعطيناه قيمة صائب كقيمة افتراضية.

في السطر رقم ( 4 ) أنشأنا تكرار باستخدام الأمر For Each لكل أدوات التحكم في النموذج .

في السطر رقم ( 5 ) 4 شرطنا على أداة التحكم التي أمسك بها الأمر السابق فيما إذا كانت مربع نص ( طبعاً استخدمنا العبارة TypeOf ) أو قائمة منسدلة ، فإنه ينفذ الأمر الموجود في السطر رقم 6 .

في السطر رقم ( 6 ) هنا شرطنا على أداة التحكم التي أمسكنا بها كي نختبرها فيما إذا كانت فارغة أو ممتلئة ، فإذا كانت فارغة فإنه سوف ينفذ الأمر الموجود في السطر 7 ، وإلا فإنه سوف يبحث عن أداة تحكم أخرى كي يختبرها من جديد.

في السطر رقم ( 7 ) نجعل قيمة المتغير NothingIsNull تساوي False . بمعنى أنه لا توجد بأداة التحكم الحالية أية بيانات أي أنها فارغة .

في السطر رقم ( 8 ) الخروج من أمر الشرط الثاني.

في السطر رقم ( 9 ) الخروج من أمر الشرط الأول.

في السطر رقم ( 10 ) نطلب من الأمر For الإمساك بأداة التحكم التالية في النموذج وهكذا .

في السطر رقم ( 11 ) استخدمنا ألكلمه Return لكي نرجع القيمة المخزنة في NothingIsNull إلى الإجراء NothingNullDATA لأنها هي القيمة التي سوف يعود بها هذا الإجراء .

في السطر رقم ( 12 ) ننهي الإجراء الفرعي .

ولكي نستدعي الإجراء نكتب NothingNullDATA(Me) فقط ، في أي جزء من البرنامج . وذلك كما يلي لمثالنا هذا ...

If NothingNullDATA(Me) = True Then
   -
   --
   ---
Else
   MsgBox("يجب التأكد من أن جميع البيانات مدخلة")
End If

هنا نصل إلى نهاية درسنا الذي لا أريد من ورائه جزاءً ولا شكورا سوى الدعاء لي ولوالدي وأسرتي ، وأرجو أن تسامحوني إن وجدتم أخطاء سواء في الإملاء أو الكود أو المعلومات أو الشرح ، فما كان من خطأ فهو من نفسي والشيطان وسوف نسعى إلى تصحيحه ما استطعنا ذلك ، وما كان من صواب فهو من توفيق الله سبحانه وتعلى .

وأرجوا أن تكون هذه المشاركة مخزن أو مستودع للإجراءات الفرعية ، وأدعو من يرغب من أخواني بالمشاركة في كتابة أجراءته الفرعية العامة أن ينشرها في هذه المشاركة حيث لا يصح أن نكتب أي إجراء فرعي في مشاركه مستقلة ما تلبث أن تختفي بعد فتره وجيزة ويصعب تجميعها من هنا وهناك أو حتى البحث عنها ، وذلك حتى تعم الفائدة للجميع ونكوّن قاعدة بيانات كبيره تكون مرجع لنا جميعاً . والله من وراء القصد ..

وفي الختام ما يسعني إلا أن أشكر الله سبحانه وتعالى على أن أعانني على كتابة هذا الدرس ألذي أرجو أن يتقبله مني ويجعله خالصاً لوجهه الكريم ...

ياسر الشيخ :P

تم تعديل هذه المشاركة بواسطة yaseralshikh في 15 أكتوبر 2006 في 18:56

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#2

جزاك الله خيرا أخي ياسر , ويمكنكم أيضا الاستفاده من دروسي في الرابط التالي My Lessons

تم تعديل هذه المشاركة بواسطة hazzoom في 15 أكتوبر 2006 في 19:19

#3

مشكور اخي ياسر .

هناك ايضا موضوع لي موجود في التعليق يتحدث عن هندسة البرمجيات وكيفية تتطور التقنيات المستخدمة في اللغات .

قد يفيد في اثراء هذا الموضوع .

#4

- أخي hazzoom أشكرك ، وأحب أن الفت إنتباهك إلى أن الرابط الذي ذكرته لا يعمل وهذه هي نص الرساله التي يفتحها الرابط (The page cannot be found ) .

- أخي فواز الشمري أشكرك ، و أهنيك على هذا الطرح الرائع ..

- أحب أن ألفت عناية السادة المبرمجين إلى أني كتبت مجموعة من الإجراءات الخاصة بقواعد البيانات ، وتجدونها في الرابط الأول من توقيعي ، وبالتحديد في المشاركة رقم 98 .

- أخواني لا تبخلو علينا بمعلوماتكم ، وإقتراحاتكم و مناقشاتكم .. لان الهدف عام وفيه مصلحة للجميع ..

:P

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#6

أحب أن أضيف هذا الإجراء الذي وجته وهو للأخ KARIMSOFT بارك الله فيه ..

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

Private Function fsNoTshkel(ByVal s As String) As String
		s = s.Replace("ْ", "") '   ْ
		s = s.Replace("َ", "") '   َ
		s = s.Replace("ِ", "") '   ِ
		s = s.Replace("ّ", "") '   ّ
		s = s.Replace("ُ", "") '   ُ
		s = s.Replace("ً", "") '   ً
		s = s.Replace("ٍ", "") '  ٍ
		s = s.Replace("ّ", "") ' ~
		s = s.Replace("ٌ", "") '  ٌ
		Return s
	End Function

ولكي ننفذ الإجراء نكتب على سبيل المثال ..

Dim txt As String = fsNoTshkel(TextBox1.Text)

تم تعديل هذه المشاركة بواسطة yaseralshikh في 16 أكتوبر 2006 في 17:05

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#7

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

كل عام والأمة الإسلامية بألف خير وعافية ونصر وتمكين من رب العالمين ..

كل عام وانتم بخير ، وجعلنا الله وإياكم من المقبولين الفائزين بجنات النعيم ورضوان رب العالمين ..

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

----------------------

أحببت أن أنبه إلى ملاحظة ذكرتها في بداية الدرس بخصوص الفرق بين ByRef و ByVal ولقد قام الأخ الفاضل crazy-man بإعطاء درس خاص أسماه "الفرق بين ByRef و ByVal "

وهو على الرابط التالي ..

/index.php?showtopic=69986

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#8

إجراء فرعي يحتوي على دالة التحويل من تاريخ هجري إلى تاريخ ميلادي ..

	Public Function HijriToGregorian(ByVal Year As Integer, _
			ByVal Month As Integer, ByVal Day As Integer) As DateTime
		Try
			Dim Ar As Globalization.CultureInfo = New Globalization.CultureInfo("ar-Sa")
			Thread.CurrentThread.CurrentCulture = Ar
			Ar.DateTimeFormat.Calendar = New Globalization.HijriCalendar
			HijriToGregorian = New DateTime(Year, Month, Day, Ar.DateTimeFormat.Calendar)
			Ar.DateTimeFormat.Calendar = New Globalization.GregorianCalendar

		Catch ex As Exception
			ex = Nothing
		End Try
	End Function

ولتطبيق هذا الإجراء على تاريخ معين إليكم هذا المثال ..

Label1.Text = HijriToGregorian(1427, 10, 1)

وهذا هو الإجراء الفرعي المعاكس له ، ويحتوي على دالة التحويل من تاريخ ميلادي إلى تاريخ هجري ..

	Public Function GregorianToHijri(ByVal Year As Integer, _
				ByVal Month As Integer, ByVal Day As Integer) As DateTime
		Try
			Dim Ar As Globalization.CultureInfo = New Globalization.CultureInfo("ar-Sa")
			Thread.CurrentThread.CurrentCulture = Ar
			Ar.DateTimeFormat.Calendar = New Globalization.GregorianCalendar
			GregorianToHijri = New DateTime(Year, Month, Day, Ar.DateTimeFormat.Calendar)
			Ar.DateTimeFormat.Calendar = New Globalization.HijriCalendar

		Catch ex As Exception
			ex = Nothing
		End Try
	End Function

ولتطبيق هذا الإجراء على تاريخ معين إليكم هذا المثال ..

Label1.Text = GregorianToHijri(2006, 10, 22)

تم تعديل هذه المشاركة بواسطة yaseralshikh في 22 أكتوبر 2006 في 19:55

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#9

هذا الإجراء من أجل إغلاق جميع النوافذ الأبناء التابعة لنافذة من نوع MDIParent ..

	Private Sub CloseAllChildrenForm()
		'إغلاق كل النوافذ الأبناء
		Dim AllChildrenForm As Form
		For Each AllChildrenForm In Me.MdiChildren
			AllChildrenForm.Close()
		Next AllChildrenForm
	End Sub

ولتنفيذ هذا الإجراء وإستدعائه نكتب ..

CloseAllChildrenForm()

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#10

هذا الإجراء من أجل تشغيل أي ملف صوتي من نوع WAV ويكون مخزن في مسار مجلد البرنامج ..

	Private Sub PlaySound(ByVal SoundName As String)
		Dim Player As New SoundPlayer()
		Player.SoundLocation = Application.StartupPath & "\" & SoundName & ".wav"
		Try
			Player.Load()
			Player.PlaySync()
		Catch Err As Exception
			' An error will occur here if the file can't be read
			' or if it has the wrong format.
			MsgBox(Err.Message)
		End Try
	End Sub

ولتنفيذ هضا الإجراء نكتب اسم الإجراء ونمرر له أسم الملف الصوتي ، كما يلي ..

PlaySound("Windows XP Information Bar")

تم تعديل هذه المشاركة بواسطة yaseralshikh في 22 أكتوبر 2006 في 20:46

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#11

هذا الإجراء من أجل تغيير مؤشر اللغه من اللغة العربية إلى اللغة الإنجليزية ، ولقد حصلت علية من مشروع للأخ أحمد المصري ..

	Public Sub SetNewCurrentLanguage(ByVal Culture As String)
		' Sets the current languages.
		Dim CInfo As CultureInfo : Dim I As Integer : Dim F As String
		For I = 0 To InputLanguage.InstalledInputLanguages.Count - 1
			CInfo = InputLanguage.InstalledInputLanguages.Item(I).Culture
			F = CInfo.ToString : F = F.Substring(0, 2)
			If F = Culture Then
				Dim Myculture As New CultureInfo(CInfo.ToString)
				Dim myCurrentLanguage As InputLanguage
				myCurrentLanguage = InputLanguage.FromCulture(Myculture)
				InputLanguage.CurrentInputLanguage = myCurrentLanguage
				Exit Sub
			End If
		Next
	End Sub

ولتنفيذ هضا الإجراء نكتب اسم الإجراء ونمرر له رمز اللغة التي نريد التعامل معها ، كما يلي ..

* للغة العربية ..

SetNewCurrentLanguage("ar")

* للغة الإنجليزية ..

SetNewCurrentLanguage("en")

---------------

أجدد دعوة أخواني المبرمجين لمشاركتنا بإجراءاتهم الفرعية ، تحى تعم الفائدة للجميع ...

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#12

هذا الإجراء يقوم بإجبار المستخدم على كتابة أرقام فقط ، حصلت عليه من مشاركة للأخ aswany ..

   Public Function PressOnlyNumeric(ByVal intKeyValue As System.Windows.Forms.KeyPressEventArgs) ' Integer
	   Dim chKiy As Char
	   chKiy = intKeyValue.KeyChar
	   If Not (Char.IsDigit(chKiy) Or chKiy = "." Or Char.IsControl(chKiy)) Then
		   MsgBox("غير مسموح بإدخال الحرف .. فضلاً إدخل أرقام فقط", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Critical, "إدخال خاطئ")
		   intKeyValue.Handled = True ' إلغاء الحرف المضغوط
	   End If

   End Function

ولتنفيذ هضا الإجراء والإستفادة منه نكتب الكود التالي في حدث KeyPress لأي textbox ..

		PressOnlyNumeric(e)   ' إدخال أرقام فقط

تم تعديل هذه المشاركة بواسطة yaseralshikh في 27 أكتوبر 2006 في 05:51

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#13

في الحقيقة أريد أن أعتذر وألفت إنتباه السادة المبرمجين إلى شيئ مهم ، وهو أنني بعد مراجعة الدرس اكتشفت أنني أرتكبت خطأ ، وهو موجود في الإقتباس التالي :

yaseralshikh كتب:
مثال1: لنفرض أنه لدينا مجموعة من أدوات التحكم ولتكن أزرار الأوامر التي يحتاج برنامجنا إلى إيقاف عملها عند نقطه معينه و إعادتها للعمل عند نقطة أخرى ، وذلك في أكثر من موقع في نفس الفورم ، وبدل من كتابة نفس الأوامر في كل مره يمكننا أن نقوم بكتابة إجراء فرعي من نوع روتين فرعي لإيقاف عملها كما يلي ..

Private Sub EnableButton ()
	Btn1.Enabled= True
Btn2. Enabled =True
Btn3.Enabled =True
Btn4.Enabled =True
End Sub

وعند الرغبة في تنفيذ هذا الروتين في أي موضع في نفس الفورم نكتب EnableButton فقط .

وبنفس الطريقة نقوم بكتابة إجراء فرعي من نوع روتين فرعي لإعادة تشغيل عملها كما يلي ..

Private Sub DisableButton ()
	Btn1.Enabled= False
Btn2. Enabled = False
Btn3.Enabled = False
Btn4.Enabled = False
End Sub

وعند الرغبة في تنفيذ هذا الروتين في أي موضع في نفس الفورم نكتب DisableButton فقط .

والصحيح أن الإجراء الفرعي EnableButton لإعادة تشغيل أدوات التحكم ، والإجراء الفرعي DisableButton لإيقاف تشغيل أدوات التحكم .

تم تعديل هذه المشاركة بواسطة yaseralshikh في 28 أكتوبر 2006 في 17:04

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#14

السلام عليكم ورحمة الله وبركاته

كل العام وأنت أخي العزيز بألف خير ورواد وأعضاء ومشرفي المنتدى بألف خير

بارك الله فيك على ما قدمته من إجراءات فرعية تساهم في إثراء المبرمج العربي

ولا وجوب للإعتذار عن الخطأ المطبعي الغير مقصود وأي قارئ له يستطيع أن يعرف بأنه خطأ مطبعي غير مقصود وهو مفهوم بأوامره وعذرك يدل على طيب منبتك

#15

هذا الإجراء يقوم بتوسيط النافذة الممررة له على سطح المكتب ، وحصلت عليه من الأخ فواز الشمري ، في الدرس الذي قدمه بعنوان السلسلة الذهبية في تعلم البرمجة, شرح عن بناء Classes و الإجراءات والدوال ..

Public Sub CenterForm(frm As Form)
 Dim H As Long, W As Long

   H = ((Screen.Height - frm.Height) / 2)
   W = ((Screen.Width - (frm.Width + 2145)) / 2)

   frm.Move W, H
   frm.Show vbModal
End Sub

ويكون استدعاء الإجراء كما يلي :

CenterForm Form5

ومن خارج الفورم كما يلي :

Form1. CenterForm Form5

تم تعديل هذه المشاركة بواسطة yaseralshikh في 3 نوفمبر 2006 في 16:33

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#17

دروس مفيدة وجميله استفدت منها وخصوصا الاجراء الخاص بمسح التكست

جزاك الله الف خير وجعله الله في ميزان حسناتك

#18

شكرا علي هذا الموضوع الشيق والجميل والي المزيد ان شاء الله

مَا أَصَابَ مِن مُّصِيبَةٍ فِي الْأَرْضِ وَلَا فِي أَنفُسِكُمْ إِلَّا فِي كِتَابٍ مِّن قَبْلِ أَن نَّبْرَأَهَا إِنَّ ذَلِكَ عَلَى اللَّهِ يَسِيرٌ (22) لِكَيْلَا تَأْسَوْا عَلَى مَا فَاتَكُمْ وَلَا تَفْرَحُوا بِمَا آتَاكُمْ وَاللَّهُ لَا يُحِبُّ كُلَّ مُخْتَالٍ فَخُورٍ (23)

#19

موضوع أكثر من رائع

واتمنى مزيد من هذه الاكواد الرائعة واتمنى ان تقوم بشرحها

تحياتى

قال رسول الله صلى الله عليه وسلم

يكبر بن أدام ويكبر معه شيئان كثرة المال وطول العمر

صدق رسول الله صلى الله عليه وسلم

قال عمر بن الخطاب رضي الله عنه

نحن قوم أعزنا الله بالإسلام فإذا إبتغينا العزة فى غيره أذلنا الله

#20

دالتان أخرى للتحويل لغة الكتابة من اللغة العربية إلى اللغة الإنقليزيه والعكس ..

	' تحويل اللغة للعربية
Public Sub LangArabic()
	Try
		Dim Lang As InputLanguage
		For Each Lang In InputLanguage.InstalledInputLanguages
			If Lang.Culture.EnglishName.ToUpper Like "*arabic*".ToUpper Then
				InputLanguage.CurrentInputLanguage = Lang
			End If
		Next
	Catch ex As Exception
		MessageBox.Show(ex.Message, "تحويل اللغة للعربية", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading, False)
	End Try
End Sub

	' تحويل اللغة للانكليزية
Public Sub LangEnglish()
	Try
		Dim Lang As InputLanguage
		For Each Lang In InputLanguage.InstalledInputLanguages
			If Lang.Culture.EnglishName.ToUpper Like "*english*".ToUpper Then
				InputLanguage.CurrentInputLanguage = Lang
			End If
		Next
	Catch ex As Exception
		MessageBox.Show(ex.Message, "تحويل اللغة للانكليزية", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading, False)
	End Try
End Sub

تم تعديل هذه المشاركة بواسطة yaseralshikh في 8 أغسطس 2007 في 20:26

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

هذا الموضوع مغلق.

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