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

فنون تصميم الفورم

بدأه seahmad في 1 مارس 2005 · 16 رد · 7,612 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم ,, الحمد لله ,, والصلاة والسلام على رسول الله

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

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

ملخص المشروع:

يستخدم الدرس مايلي: Timer, Progress Bar, Percentage, DoEvent

النموذج الأول: التعامل مع الزمن حيث تظهر رسالة لمدة 10 ثواني تتناقص على الفورم بعد ذلك يظهر زري اختيار

النموذج الثالث : يفتح نموذج عليه قائمة منسدلة تعبأ بThread ويظهر في الأسفل Progres Bar

النموذج الثاني والرابع: يفتح نموذج2 عليه 3 قوائم منسدلة تعبأ بدون Thread ولكن يفتح نموذج رابع عليه نصوص وأدوات تبين موضع التعبأة الحالي للقوائم

الشرح:

**** أداة الزمن Timer: ****

أول أداة ستلا حظها في المثال المرفق هي أداة الزمن Timer وقد طلب مني مرة أن أعمل برنامجا يقوم بسحب آخر تحديث للبيانات الموجودة على سيرفر الشركة في بداية كل ساعة وترحيلها إلى الموقع على الإنترنت بشكل تلقائي, وتم ذلك بوضع ساعة على الفورم يتم تحديثا كل ثانية مع مقارنة الوقت لفحص وصول الوقت في رأس أي ساعة ليتم بدئ السحب والترحيل. ولعمل ساعة على النموذج: أضف ليبل ثم أضف Timer Control على النموذج واذهب إلى خصائص الTimer وضع 1000 في خاصية الInterval والمقصود بها الفترة التي يتم فعل شيئ بعدها وهنا وضعنا 1000 ملي سكند وتعادل ثانية واحدة. إضغط مرتين على Timer Control ليظهر

حدث Tick واكتب الكود التالي:

        Label1.Text = Now

حيث أن الدالة Now تعيد لنا الوقت والتاريخ وقد أسندنا القيمة إلى Label1

الآن في حدث التحميل للفورم ضع:

        Timer2.Start()

هذا الكود يأمر المؤقت بالبدئ

**** أداة تقدم العمليات ProgressBar: ****

في المثال المرفق في نموذج3 يوجد عليه Progress Bar Control أيضا هذا النموذج مستخدم فيه تقنية Threading التي تم شرحها في الدرس الثاني ويمكنك الرجوع إليه وستلاحظ أن مؤشر تقدم العمليات يتحرك بينما يتم ملئ قائمة الأرقام ففي هذا النموذج سمحنا للمستخدم البدئ بالعمل مباشرة بفضل Threading وفي نفس الوقت بإمكان المستخدم معرفة متى بالضبط سينتهي تحميل البيانات بفضل Progress Bar.

إذهب إلى كود النموذج2 ثم إلى البروسيجر FillComboBox1 سترى ثلاثة معاملات

1- pBar1.PerformStep() : تقدم خطوة للأمام

2- pBar1.Maximum عدد الخطوات الذي سيحذوها المؤشر والتي يجب أن تساوي عدد مرات

أستدعاء pBar1.PerformStep وفي المثال القيمة تساوي 100000 وهي عدد مرات تكرار Do While حيث كل دورة تعتبر خطوة

3- pBar1.Step حجم خطوة تقدم المؤشر وتساوي واحد

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

**** البروسيجر DoEvent والنسبة Persentage: ****

هذا الأمر يتيح للمعالج قطع تنفيذ العملية الحالية والذهاب لإنجاز عملية واحدة في الإنتظار ثم العودة لإكمال العملية الحالية. ومما اضرني لاستخدام هذه الأداة المهمة في مرة من المرات أردت أن أحول بيانات الشركة التي أعمل بها من آكسس إلى SQLServer وكان حجم البيانات يزيد عن 2 جيجا مقسمة في مآت من الجداول. اضررت إلى تقسيم بعض الجداول الضخمة إلى عدة جداول صغيرة وتوزيع بياناتها فيها مما اضطرني إلى عمل الكثير من المفاتيح الفرعية وقد استغرق ملئ هذه الجداول الكثير من الوقت بسبب البحث الطويل الذي نتج من تقسم تلك الجداول الكبيرة وقد وصل أحيانا الوقت المستغرق في البحث وتوزيع البيانات إلى أكثر من عشرين ساعة. طبعا خلال هذا الوقت الطويل أحسست أني أريد أن أرعف أين وصلت العملية وكم باقي من الزمن لانتهائها وهل مازالت تعمل أم أن الجهاز قد حصل له Hang Up.

النموذج2 يحتوي على المفهوم السابق. حيث Application.DoEvents() ستلاحظ أنها تستخدم دائما بعد طلب إنجاز عملية خارج العملية الحالية (هنا سينتقل العمل من النموذج2 إلى النموذج4) من تغيير التوضيح الموجود على النموذج4. أما بالنسبة للPersentage فهناك متغير إسمه Parts نخزن فيه مجموع عدد العمليات قسمة 100 وقسمنا على 100 لأن تغير النسبة سيتم 100 مرة (من 1 إلى 100) وفي مثالنا 100000/100=1000. الآن سنستخدم هذا الناتج (Parts =1000) بأن نأخذ باقي قسمته على متغير ما (المتغير في المثال هو i) يبدأ من واحد إلى عدد العمليات (في المثال عدد العمليات=100000) كالتالي If i Mod Parts = 0 Then هذا الشرط سيتحقق بالتأكيد 100 مرة فقط لأن ال100000 تحتوي على 100*1000 ولن يكون باقي القسمة صفر إلا إذا كانت قيمة i من مضاعفات 1000.

متمنيا من العلي القدير أن يفيد المسلمين بما تقدم.

ThirdClass.zip

تم تعديل هذه المشاركة بواسطة seahmad في 1 مارس 2005 في 10:57

1

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#2

أخي الكريم .. جزاك الله الف خير على هذه السلسلة المميزة ..

عندي سؤالين

1- كيف اعرف Parameter يستخدمه جميع الفورم لدي في البرنامج ؟

2 - كيف اغير في property لفورم بحيث تجبر المستخدم بعدم فتح فورم اخرى حتى يغلق الفورم التي قبلها

وشكرا لك

#3

ج1/ عرف المتغير داخل Module

ج2/ إستخدم ShowDailog :

Dim x as new Form1

x.ShowDailog

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#4

شكرا اخي seahmed لتجاوبك السريع ويعطيك الف عافية

#5

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

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#6

شكراااا أخي seahmad على الدرس الرووعه...

ولكن اعذرني ما عندي تعليقات .. لأن الدرس صعب علي شوي

#7

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

بارك الله فيكم اجمعين

اخوكم عمر من فلسطين

سلام

#9

السلام عليكم

والله يا أخي البرنامج أبداع ولكن ممكت تشرح لنا طريقة العمل أثناء التحميل لأنه بالفعل امر ضروري

شكرًا لك

#10

اخي احمد لاحظت شئ غريب في البرنامج وخاصة الفورم رقم 3

لو استغنيت عن الثيرد وعملت استدعاء للإجراء في حدث loud للفورم صحيح ان المستخدم مايقدر يختار اثناء تعبئة الكمبوبوكس ولكن التبعبئة تصبح اسرع بكثير في بضع ثواني يفتح الفورم معبأ وجاهز لكن بطريقة الثيرد يستغرق أكثر من الوقت ليش ياترى ؟

وغير كذا ممكن شرح لوظيفة الثيرد لأني بصراحه اشوفها جديده علي :)

شكرًا لك يالغالي

#11

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

بالطبع استخدام تعدد المهام أبطئ لأنك سمحت للبروسيسور بأن يقوم بأعمال أخرى أثناء تعبة القوائم أي بمعنى آخر لم تستغل المعالج بشكل كامل وتخصصه للعملية الحالية، وهذا هو حال نظام التشغيل/ برنامج ويندوز والذي يمكنك مثلا من فتح عدة برامج في نفس الوقت والانتقال من برنامج إلى آخر ولذلك سمي ويندوز. ولو لم يوجد Threading لما استطعت فعل ذلك في الويندوز ولكان نظام معقد وممل لأنك لن تستطيع تشغيل أكثر من شيئ في نفس الوقت كأن تستمع للقرآن أثناء كتابتك لخطاب في الورد بينما تشغل برنامج تفحص الفيروسات وقد يكون الماسنجر يعمل على النت أيضا.. وستستفيد في حياتك العملية من الThreadin كما وضحت في درس الفورم السريع :

اقتباس
سأضرب لك مثالاًَ حتى تتضح الصورة

تخيل أنك تملك نموذجا في برنامجك وعليه عدد كبير من حقول البيانات ومن بينها قوائم سرد وتحرير ComboBoxes وهذه القوائم قد تحتوي على الآلاف من البنود Items فمثلا هناك قائمة بأسماء المدن وقائمة بالجنسيات وقائمة بأسماء الشركات ... وهذه القوائم قد تستمد البيانات من السيرفر من خلال الشبكة , فمذا يحدث للفورم عند فتحه ؟ سيستغرق بعض الوقت وقد يصل إلى دقيقة أو أكثر . وإذا كان برنامجك كبير ويحتوي على الكثير من هذه النماذج فهذا يعني أن المستخدم سينجز عمله ببطئ وسيستغرق أضعاف الوقت لأنه في كل خطوة عليه أن ينتظر. من هنا جائت فكرة تعدد المهام أي أن يسمح للمستخدم بأن يعمل أشياء أخرى أثناء تحميل أثناء تحميل البيانات على النموذج أو أثناء إنجاز أي عملية.

وبالتوفيق

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#12

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

بجد سلسلة الدروس ممتازة بالفعل

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

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#13

لم اشاهد الملفات حتى الان ولكن شكرا جزيلا حتى من قبل ان اراها

الايمان +الحلم +العلم +العمل = النجاح

ما اسهل ان تنجح ... وما اصعب ان تحافظ على نجاحك

#14

ماشاء الله اللهم بلغنا ما مراتبهم في العلم

من تواضع لله رفعه

#15
اقتباس
كيف يمكن التحكم فى لون ProgressBar؟؟
اقتباس
تم تجربة الأكواد الأتية دون فائدة ؟؟؟؟

ProgressBar1.ForeColor = System.Drawing.Color.Gold 
                                  ProgressBar1.BackColor = Color.Gold            
Me.ProgressBar1.ForeColor = System.Drawing.Color.Gold
#16
seahmad كتب:
ج1/ عرف المتغير داخل Module

ج2/ إستخدم ShowDailog :

Dim x as new Form1

x.ShowDailog

اخي seahmad يجب عليه تعريف المتغير هكذا

public x as new Form1

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#17

جزاك الله خيري الدنيا و الآخرة و نفع بك

بارك الله فيك

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