![]() |
|
[سلسلة تعليمية] دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مكتبة اكواد VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=185) +--- الموضوع : [سلسلة تعليمية] دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي (/showthread.php?tid=20689) |
دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي - عبدالله خضر - 10-06-17 السلام عليكم ... في هذا الموضوع أقدم لكل الأعزاء من الأعضاء والزوار هذا الموضوع ، وهو يتعلق بالدوال والإجراءات التي التي صممتها وابتكرتها وأتعامل معها شخصيا ولا أستغني عنها ، وهي كثيرة ومتعددة النواحي والإستخدامات ، رأيت أن أفيد غيري بها .. فأحد أسباب شغفي بالبرمجة بلغة الـ VB.Net هو تصميم الدوال والإجراءات ، وفكرتها الأساسية أنها عبارة عن مجموعة أكواد قصيرة أو طويلة يتكرر إستخدامها في سطورالبرنامج ، وبدلا من تكرار كتابتها أو نسخها ، تختصر العملية في إستدعاء كل تلك الأكواد والأوامر بكلمة واحدة ، تطلب منك محددات معينة لعمل المطلوب .. بلا شك ... الدوال والإجراءات وسيلة تختصر الكثير والكثير من الجهد والوقت ، بالإضافة إلى أنها قابلة للتطوير من عقل مبدع يفهم في آليات البرمجة ... في هذا الموضوع سأذكر الدوال والإجراءات تباعاً وشرح مبسط عنها وعن أهميتها ونتيجتها ، وأنصح المبرمج بتجميعها وحفظها في ملف ( ميديول ) للإستفادة منها أثناءالبرمجة ، والله المستعان : 1 - إجراء حفط نص أو مجموعة نصوص في ملف : إسمها ( كما سميتها طبعا ) : SaveDocToFile كود ونص الإجراء : كود : Sub SaveDocToFile(ByVal FileNamePath As String, ByVal DocString As String, Optional ByVal IsAppend As Boolean = True)شرح عمل الإجراء : قد تحتاج في أحد برامجك الجدية أمراً سريعا ومختصراً ومرناً أيضاً لحفظ معلومة أو نص أو مجموعة نصوص ( مهما كان حجمها ) ؛ حفظها في ملف ما في أمر واحد ، فهذاالإجراء صممته لهذا السبب وأضفت له خاصيتين مهمتين أيضاً ، وسآتي لذكرهما لاحقا . فعند كتابتك إسم الإجراء ، وهو كما سميته أنا : SaveDocToFile ، سيطلب منك أولا كتابة إسم مسار الملف ( سواءا كان موجودا أو لا ) ، هكذا مثلا : كود : C:\Test.txtأو بواسطة متغير معرف نصيا مثلا : كود : S as Stringأو إختصاراً : كود : S as String="C:\Test.txtوبعدها سيطلب منك جملة النص أيا كان ( وهو كالسابق متغير نصي ) ، وبعد إثباته يكون الإجراء مستعداً للتنفيذ .. ستلاحظ وجود خيار إفتراضي ( منطقي ) في الإجراء وهو : Optional ByVal IsAppend As Boolean = True ومعناه أنه في حال لم يضع المستخدم للإجراء فاصلة بعد جملة النص فسيكون الخيار IsAppend في حالة منطقية إفتراضية دائما هي True أي بمعنى نعم ( حقيقي ) .. والمقصود بالكلمة IsAppend هو متغير الغرض منه التوضيح للمستخدم كأنه يساله : هل يضاف النص هذا بعد اي نص قد يحتمل وجوده في الملف ؟ .. أي خاصية الإلحاق والإضافة ... فإذا تجاهلته فسيفهم الإجراء أنك تقصد أن يحفظ النص بشكل تراكمي في كل مرة تعطيه نفس المسار للملف .. أما في حالة أنك تريد أن يكون النص لوحده فقط في الملف بدون إضافة أي نص فما عليك إلا أن تضع فاصلة بعد النص ( أو متغير النص ) ، ثم تكتب False ، أي بمعنى لا ( مزيف ) ... ستفهم ما أقصده إذا لاحظت خيارات السطور البرمجية في نص الإجراء ... --- يُتبع باقي الدوال والإجراءات ---
RE: دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي - sendbad100 - 10-06-17 وعليكم السلام ورحمة الله وبركاته الله يعطيك العافية دائما مشاركاتك مبدعه متابع معك باذن الله RE: دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي - عبدالله خضر - 10-06-17 2 - دالة السؤال للتأكد : إسمها ( كما سميتها طبعا ) : Confirm كود ونص الدالة : كود : Function Confirm(ByVal Title As String, ByVal QuestionOfMessage As String, Optional ByVal RightToLeftStyle As Boolean = False) As Booleanشرح عمل الدالة : بالتأكيد كل برنامج قوي أو ذكي التصميم يخضع لبوابات قبل الوصول للوجهة النهائية ، أقصد بها مثلا قد تٌدخل بيانات ولكن تريد التأكد قبل حفظها أو تعديلها أو حذفها نهائياً ، ولابد أنك كمبرمج تعرف الدالة MsgBox ، وهي لسؤال مستخدم البرنامج قبل عمل شيء ما كما ذكرت ... الفكرة هنا في الدالة Confirm هي نفس عمل الدالة MsgBox ، ولكن بشكل أبسط بخصوص اللغتين : عربية أو إنجليزية ، وأنت تعرف الفرق في إتجاه النص ( العربي ) عنه في إتجاه النص ( الإنجليزي ) ، فالأول من اليمين نحو اليسار ، والثاني بالعكس ، وكذلك علامتي الإستفهام ( ؟ أو ? ) .. فهذه الدالة مرنة باللغتين وبدون إضافة علامة الإستفهام ، ومخرجاتها منطقية ( نعم أو لا ) True أو False .. للدالة ثلاث متغيرات ( بوابات ) : الأولى : Title As String وهي نص ( التعليق ) في مربع رسالة التأكد . الثانية : QuestionOfMessage As String وهي نص ( محتوى الرسالة ) في مربع رسالة التأكد . الثالثة : إفتراضية منطقية : RightToLeftStyle As Boolean = False وهي إختيارية محددة مسبقا على المنطق ( لا False ) بخصوص إتجاه الكتابة ( من اليمين إلى اليسار = لا ) أي تخص النص الإنجليزي .. أما في حال أردت العكس ( نص عربي ) فما عليك إلا أن تحدد المنطق ( نعم True ) ليكون مخرجات الدالة باللغة العربية وإتجاه نصها .. كمثال نضع الكود الآتي في زر Button :
فهذه الدالة توفر عليك إختيار وتحديد المعاملات بخصوص السؤال باللغتين .. Dim W as Boolean = Confirm ( "للتأكد" , "هل أنت متأكد للخروج نهائيا من البرنامج" , True )
(( ملاحظة مهمة هنا : لم أستطع صياغة المحاذاة العربية كما يجب بسبب شوائب دعم اللغة العربية في المحرر ))
كود : W = True then Endفهذه الدالة توفر عليك إختيار وتحديد المعاملات بخصوص السؤال باللغتين ..
RE: دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي - عبدالله خضر - 11-06-17 3 - دالة إختيار أحد عناصر حزمة نصية برقم ترتيبها بواسطة فاصلة معينة بين العناصر :
( وهي أحد مجموعة من الدوال طورتها بلاحقة Item )
إسميتها : ItemSN كود ونص الدالة : كود : Function ItemSN(ByVal SN As Integer, ByVal ItemsString As String, ByVal Comma As String) As Stringشرح عمل الدالة : هذه الدالة وقريباتها الآتيات من نوع ( Item ) مصممة خصيصا للتعامل مع النصوص والكلمات والجمل أيا كانت ، وعمودها الفقري هي دالة فصل العناصر النصية Split بفاصلة محددة موجودة مسبقا في سلسلة النص ، وهي - كما يعرف المبرمج - تحول العناصر النصية المفصولة إلى مصفوقة أحادية ، تبدأ بالرقم 0 .. مجموعة دوال وإجراءات النوع ( Item ) التي طورتها كانت نتاج إستفادة قصوى للدالة Split هذه ، حيث سيتبين لك مدى فائدتها الكبيرة في معالجات النصوص وسهولة ومرونة عملياتها في الأمثلة التي ستوضح لك كل شيء عن هذه العائلة البرمجية .. وظيفة هذه الدالة بسيط ، وكمثال : الجملة : Welcome to VB.Net World My Dear أسندناها لمتغير نصي ( حرفي String ) مثلا : A as String = "Welcome to VB.Net World My Dear" ' Example وإذا أردت الحصول على الكلمة الثالثة مثلا من النص ، حسنا فكيف العمل - بدون هذه الدالة - ؟؟ لابد من الشرح الآتي لتعرف السبب وراء تطوير هذه الدالة وأخواتها : 1 - طبعا في البداية لزاما عليك أن تعرّف متغير نصي مصفوفي ديناميكي مرن ( على شكل مصفوفة ديناميكية لا محدودة ) ، ليكن مثلا B() as String مع القوسين الفارغين .. 2 - ثم الخطوة الثانية ، إسناد المتغير A و B إلى دالة الفصل Split : B = Split(A) في حال كانت الفاصلة فراغ واحد ( مسافة واحدة ) ، أما غير ذلك مثلا الفاصلة بين المقاطع غير الفراغ الواحد فستصبح الصيغة هكذا : B = Split(A,",") هنا إخترت نوع الفاصلة ( , ) ويمكنني إختيار أي حزمة أو علامة على أساس أنها فاصلة في المقطع النصي.. 3 - ثم نأتي للخطوة الثالثة ، وهي تحديد العنصر المراد أخذه من المقطع الأم : Dim C as String = B(2) لماذا 2 وليس 3 ؟؟ ... لأن المصفوفة تبدأ بالرقم صفر ، أي العنصر الأول في الخانة 0 ، والثاني في الخانة 1 ، والثالث في الخانة 2 ... إلخ ... هنا أكون قد أوضحت لك السبب .. وهو الإختصار والمرونة ، فعندما نعود للمثال السابق : A as String = "Welcome to VB.Net World My Dear" ' Example فما علي إلا أن أستدعي الدالة ItemSN بهذه الصيغة وأسند ناتجها إلى متغير حرفي : Dim Word As String Word = ItemSN(3,A,"") فقط ... أنا هنا أريد الكلمة الثالثة في المقطع A .. أما الفاصل إذا كان للفراغ فتستطيع كتابته "" أو " " كلاهما سيان .. شيء واحد في الدالة.. هنا ستكون القيمة للمتغير Word = VB.Net .. الآن ربما فهمت عمل هذه الدالة ، بسيطة ... وأعذرني لتطويل الشرح !! ، فلقد كان ضروريا ومهما ، لأن ما سيأتي بعدها من أخواتها يكون أساس فهمه من هنا .. وهذا الشرح ياصديقي يقصد به إلقاء الضوء حول كيفيات وأسباب تصميم الدوال وجدواها ... 4 - دالة تحديد عدد العناصر النصية بواسطة فاصلة معينة بين العناصر :
( وهي أحد مجموعة من الدوال طورتها بلاحقة Item )
إسميتها : ItemsCount كود ونص الدالة : كود : Function ItemsCount(ByVal ItemsString As String, ByVal Comma As String) As Integerشرح عمل الدالة : تعطي عدد العناصر النصية في المقطع النصي ، وبواسطة تحديد الفاصل الذي يفصلها . وفي المثال الآتي : A as String = "Welcome to VB.Net World My Dear" ' Example فعدد كلماتها يكون : Dim C As Integer = ItemsCount( A , "" ) سنكون قيمة C هي العدد 7 ومثال آخر : A as String = "Pen-Pen and Paper-Ink-Book with pen" ' Example كم هو عدد العبارات في هذا المقطع ؟ .. الجواب هو : Dim C As Integer = ItemsCount( A , "-" ) لاحظ أن العبارات مفصولة بالفاصل ( - ) سنكون قيمة C إذن هي العدد 3 ... أي يوجد في المقطع 3 مقاطع أو عبارات يفصلها الفاصل شرطة ( - ) وستفيدنا هذه الدالة في تحديد حلقة For ... Next في الأمثلة والشروحات القادمة .. ملاحظة : هذه الدالة وقريباتها الآتيات من نوع ( Item ) مصممة خصيصا للتعامل مع النصوص والكلمات والجمل أيا كانت ، وعمودها الفقري هي دالة فصل العناصر النصية Split بفاصلة محددة موجودة مسبقا في سلسلة النص ، وهي - كما يعرف المبرمج - تحول العناصر النصية المفصولة إلى مصفوقة أحادية ، تبدأ بالرقم 0 .. RE: دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي - عبدالله خضر - 11-06-17 5 - دالة إختيار عدد من مجموعة أعداد محزومة على شكل متغير نصي بواسطة فاصلة معينة بين العناصر :
( وهي أحد مجموعة من الدوال طورتها بلاحقة Item )
إسميتها : ItemSNval كود ونص الدالة :
كود : Function ItemSNval(ByVal SN As Integer, ByVal ItemsString As String, ByVal Comma As String) As Integerشرح عمل الدالة :
تخيل وجود سلسة اعداد على شكل حزمة نصية String يفصلها فاصل معين ... فأريد إختيار عدد منها ولكن الناتج بصيغة عددية .. الجواب بسيط : هو إضافة ( دالة القيمة العددية Val ) في كود ناتج الدالة السابقة ItemSN .. وأيضا نوع المخرجات يكون Integer بدلا من String ... إذن نحن إستنسخنا منها أخت لها وسميناها ItemSNval .. مع تعديلات بسيطة جدا ... هذا كل مافي الأمر !! وفي المثال الآتي سلسلة أعداد في حزمة نصية : E As String = "3 54 98 120 6 777" ' Example
وأريد العدد الرابع من الحزمة المفصولة بفراغ واحد ، سيكون الجواب هو : Dim N as Integer = ItemSNval( 4, E , "" )
والناتج طبعا يكون العدد 120 وسيكون بصيغة عددية وليست نصية ... RE: دوال وإجراءات مهمة وضرورية للمبرمج - من تصميمي - عبدالله خضر - 16-06-17
6 - دالة تحديد عدد عناصر الليست بوكس ListBox
إسميتها : ListBoxCount
كود ونص الدالة : كود : Function ListBoxCount(ByVal ListBoxName As ListBox) As Integerسبب إنشاء الدالة : غالبا ماتحتاج إنعاش صندوق الليست بالأمر Refresh ، وبعدها تحصيل عدد عناصر الليست .. يعني خطوتين تتكرر كل مرة إذا أردت معرفة عدد العناصر الموجودة في الليست - ياللملل - فللإختصار نجعلها دالة ونستدعيها بإسم الدالة ونكتب إسم الليست فقط ...
===============================
7 - دالة إقتطاع إسم الملف فقط من نص مساره الكامل
إسميتها : FileNameOfPathFile
كود ونص الدالة : كود : Function FileNameOfPathFile(ByVal FilePath As String, Optional ByVal WithExtension As Boolean = True) As Stringشرح عمل الإجراء : في حال أردت إظهار إسم الملف فقط بدون نص مساره كله . كمثال إسم المسار الكامل للملف يكون : C:\Test Folder\test.txt
أما إسم الملف فقط ، فسيظهر : test.txt
مع إمتداده txt
أما في حال غيرت الإختيار الإفتراضي WithExtension ليصبح False ، فسيظهر إسم الملف فقط بدون إمتداده .. ستلاحظ أن عمليات هذه الدالة تعتمد كليا على دوال المجموعة ( Item ) التي ذكرتها سابقا ، وهذا هو مفهوم ( التكامل الوظيفي ) بين الدوال. ===============================
8 - إجراء نسخ أسماء جميع الملفات الموجود في مجلد محدد إلى صندوق اللائحة ( الليست بوكس ) ListBox
إسميتها : CopyFilesNameInDirToListBox
كود ونص الإجراء : كود : Sub CopyFilesNameInDirToListBox(ByVal DirName As String, ByVal ListBoxName As ListBox, _شرح عمل الإجراء : في أحد برامجك الجدية أردت قائمة أسماء الملفات الموجودة في مجلد ما ، قد يكون ذلك للإستطلاع أو تعديل أسماء منها أو حذف أو نقل أو فتح المحتوى أو أو ... طبعا الليست بوكس ListBox أداة لاغنى لكل مبرمج عنها بخصوص عرض محتوى القوائم ، إذن نريد رؤية قائمة أسماء الملفات هذه في ليست معين .. هذا هو بالضبط عمل هذا الإجراء .. وذلك يكون عبر المدخلات المطلوبة ( الباراميترات ) الآتية مع وجود إختيارات مهمة مرنة : DirName As String متغير نصي : يطلب منك مسار المجلد المطلوب ، إلزامي . ListBoxName As ListBox إسم الليست المطلوب نسخ أسماء الملفات إليه ، إلزامي . Optional WithExtension As Boolean = False متغير منطقي إختياري ( ليس إلزاميا ) ، محدد إفتراضيا بالقيمة المنطقية False أي لا . وهو بمعنى : هل تريد عرض أسماء الملفات مع إسم إمتدادها ؟ Optional LabelNameForViewCountOfItems As Label = Nothing متغير إختياري ( ليس إلزاميا ) لتحديد إسم الليبل Label الذي سيطبع عليه عدد عناصر الليست ( عدد أسماء الملفات في المجلد المحدد ) ، محدد إفتراضيا بالقيمة Nothing أي أنه غير موجود في حال لم تكتب إسم الليبل ، أما إذا كتبت إسم ليبيل موجود في البرنامج لهذا الغرض ستصبح قيمة الباراميتر تلقائيا = IsNot Nothing ، أي عكس ( غير موجود ) ، يعني ( موجود ) ملاحظة :
ستلاحظ وجود دالة سابقة وهي ListBoxCount في هذا الإجراء ..
هذا معناه وجود ( تكامل وظيفي تلقائي ) بين الدوال والإجراءات المختلفة يهدف للفاعلية الإنتاجية في إختصار الوقت والجهد ، ولكن بشرط وجودها في ملف أو ملفات ميديول Module في برنامج واحد ..
لهذا السبب أوصي بتجميع دوال هذا الموضوع في ملف ميديول واحد ..
|